有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在javafx中创建这种类型的按钮

enter image description here

javafx中,我可以创建这种类型的按钮吗?我试过一个splitmenubutton,但它包含了带箭头的按钮。在此图片中,按钮包含一个带文本的箭头和一个图像(不仅仅是箭头)


共 (1) 个答案

  1. # 1 楼答案

    下面是一个使用MenuButton的示例。我发现了一个选项图像和一个向下箭头图像

    Key code

    //Use a VBox to stack the different nodes
    menuButton.setGraphic(new VBox(new StackPane(imageView), label, new StackPane(imageView2)));
    

    ***附加的CSS文件将删除默认的向下箭头。***

    Full code

    import javafx.application.Application;
    import javafx.geometry.Side;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.control.Menu;
    import javafx.scene.control.MenuButton;
    import javafx.scene.control.MenuItem;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.layout.StackPane;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    /**
     *
     * @author Sedrick
     */
    public class JavaFXApplication9 extends Application {
    
        @Override
        public void start(Stage primaryStage) {
    
            MenuItem menuItem1 = new Menu("One");
            MenuItem menuItem2 = new Menu("Two");
    
            MenuButton menuButton = new MenuButton();
            ImageView imageView = new ImageView(new Image(getClass().getResourceAsStream("options.png")));
            imageView.setFitWidth(25);
            imageView.setFitHeight(25);
            ImageView imageView2 = new ImageView(new Image(getClass().getResourceAsStream("arrow.png")));
            imageView2.setFitWidth(25);
            imageView2.setFitHeight(15);
            Label label = new Label("Options");
            menuButton.setGraphic(new VBox(new StackPane(imageView), label, new StackPane(imageView2)));
            menuButton.getItems().addAll(menuItem1, menuItem2);
            menuButton.setPopupSide(Side.BOTTOM);
    
            StackPane root = new StackPane();        
            root.getChildren().add(menuButton);
    
            Scene scene = new Scene(root, 300, 250);
            scene.getStylesheets().add(getClass().getResource("myCss.css").toString());
    
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
    
            primaryStage.show();
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }
    }    
    

    CSS文件

    来自here的代码

    .menu-button > .arrow-button {
        -fx-padding: 0;
    }
    
    .menu-button > .arrow-button > .arrow {
        -fx-padding: 0;
    }
    

    Results

    enter image description here enter image description here