JavaFX:如何制作带有两 (2) 个或更多图标的按钮?
JavaFX : how to make a button with two (2) or more icons?
关于如何向 JavaFX 按钮添加图形的在线资源很多。
但是我想知道是否有办法添加第二张(或任何数字,但在大多数情况下超过 2 张图像可能没有多大意义)图像。
我的用例:我有一个按钮,左侧有一个方形图标,后跟一个文本标签。该图像是按钮所链接的某些 real-life 概念的表示(例如可以是汽车或人)。我想在一些按钮的右侧添加一个小图标,一个 "right chevron" 来指示交互的性质。
我想也许可以使用全宽的 HBox 作为按钮的图形节点,并向其中添加 2 个图像,但我认为将文本放在顶部是不可能的图形节点。
有什么想法吗?
您可以尝试在按钮中使用 html 格式,并在文本前后添加带有标签的图像。
您可以在此处找到更多相关信息:http://docs.oracle.com/javase/tutorial/uiswing/components/html.html
我有同样的事情要相处。您使用 HBox 描述了解决方案。我认为这也是最好的方法。
执行以下操作:
使用您自己的特定布局创建一个新的 CustomButton,可能使用 HBox 并从 JavaFX 扩展 Button class。按照您需要的方式设置样式,您可以在自定义按钮中添加任意数量的图像。也许它看起来像这样:
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);
}
}
关于如何向 JavaFX 按钮添加图形的在线资源很多。
但是我想知道是否有办法添加第二张(或任何数字,但在大多数情况下超过 2 张图像可能没有多大意义)图像。
我的用例:我有一个按钮,左侧有一个方形图标,后跟一个文本标签。该图像是按钮所链接的某些 real-life 概念的表示(例如可以是汽车或人)。我想在一些按钮的右侧添加一个小图标,一个 "right chevron" 来指示交互的性质。
我想也许可以使用全宽的 HBox 作为按钮的图形节点,并向其中添加 2 个图像,但我认为将文本放在顶部是不可能的图形节点。
有什么想法吗?
您可以尝试在按钮中使用 html 格式,并在文本前后添加带有标签的图像。
您可以在此处找到更多相关信息:http://docs.oracle.com/javase/tutorial/uiswing/components/html.html
我有同样的事情要相处。您使用 HBox 描述了解决方案。我认为这也是最好的方法。
执行以下操作: 使用您自己的特定布局创建一个新的 CustomButton,可能使用 HBox 并从 JavaFX 扩展 Button class。按照您需要的方式设置样式,您可以在自定义按钮中添加任意数量的图像。也许它看起来像这样:
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);
}
}