Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:如何制作一个带有两(2)个或更多图标的按钮?_Java_User Interface_Javafx - Fatal编程技术网

JavaFX:如何制作一个带有两(2)个或更多图标的按钮?

JavaFX:如何制作一个带有两(2)个或更多图标的按钮?,java,user-interface,javafx,Java,User Interface,Javafx,关于如何将图形添加到JavaFX按钮,有很多在线资源 然而,我想知道是否有办法添加第二个(或任何数字,但在大多数情况下超过2个图像可能没有多大意义)图像 我的用例:我有一个按钮,左边有一个正方形图标,后面是一个文本标签。图像是按钮所关联的一些现实生活概念的表示(例如,汽车或人)。我想在一些按钮的右侧添加一个小图标,一个“右V形”来表示交互的性质 我想也许可以使用一个全宽的HBox作为按钮的图形节点,并将两个图像添加到其中,但我认为不可能将文本放在图形节点的顶部 有什么想法吗?您可以尝试在按钮中

关于如何将图形添加到JavaFX按钮,有很多在线资源

然而,我想知道是否有办法添加第二个(或任何数字,但在大多数情况下超过2个图像可能没有多大意义)图像

我的用例:我有一个按钮,左边有一个正方形图标,后面是一个文本标签。图像是按钮所关联的一些现实生活概念的表示(例如,汽车或人)。我想在一些按钮的右侧添加一个小图标,一个“右V形”来表示交互的性质

我想也许可以使用一个全宽的HBox作为按钮的图形节点,并将两个图像添加到其中,但我认为不可能将文本放在图形节点的顶部


有什么想法吗?

您可以尝试在按钮中使用html格式,并在文本前后添加带有标记的图像


你可以在这里找到更多关于它的信息:

我也有同样的事情要处理。您可以使用HBox来描述解决方案。我认为这也是最好的办法

请执行以下操作: 使用您自己的特定布局创建一个新的CustomButton,可以使用HBox并从JavaFX扩展Button类。根据您的需要设置样式,您可以在自定义按钮中添加任意数量的图像。也许它可以像这样:

public class CustomButton extends Button
{
   private HBox hbox;
   private ImageView image1;
   private ImageView image2;

   public CustomButton()
   {
      super();
      // Here add your specific images to global or local variables and then add all the children    (images) to your HBox layout and this one to the button.
   }
}

问题在于,JavaFX提供的是普通的按钮,而不是深度定制的组件。如果您想设置样式,您可以使用CSS。

使用图标和文本创建您自己的自定义节点,并将其设置为图形。当然,您不会显示按钮文本,因为它已经在自定义图形节点中

这里有一个简单的例子。您需要提供文件icon1.png和icon2.png

public class ButtonWithMultipleIcons extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {

            Group group = new Group();

            Button button = new Button();
            button.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);

            HBox hBox = new HBox();

            ImageView icon1 = new ImageView( getClass().getResource( "icon1.png").toExternalForm());
            ImageView icon2 = new ImageView( getClass().getResource( "icon2.png").toExternalForm());

            Label label = new Label("Text");

            //make the button grow if you want the right icon to always be on the right of the button :
            label.setMaxWidth(Long.MAX_VALUE);

            HBox.setHgrow(label, Priority.ALWAYS);


            hBox.getChildren().addAll( icon1, label, icon2);

            button.setGraphic(hBox);

            group.getChildren().add( button);

            Scene scene = new Scene(group,400,400);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这就是路。我编辑了答案并添加了代码以使标签增长,从而使正确的图标始终位于按钮的右端。是的,这是Swing而不是JavaFX。