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