我想改变按钮的样式,这里大部分帖子和互联网上的文章都展示了如何使用Java代码来实现,但我认为这不是一个真正好的解决方案,是否有一种方法可以仅通过FXML(不用CSS)设置一个包含一些文本和图像的按钮?
我想改变按钮的样式,这里大部分帖子和互联网上的文章都展示了如何使用Java代码来实现,但我认为这不是一个真正好的解决方案,是否有一种方法可以仅通过FXML(不用CSS)设置一个包含一些文本和图像的按钮?
仅使用fxml的解决方案
正如tarrsalah所指出的那样,虽然你也可以在fxml中完成此操作,但css是推荐的方法:
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Button layoutX="104.0" layoutY="81.0" mnemonicParsing="false" text="Love Potion">
<font>
<Font size="30.0" />
</font>
<graphic>
<ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="http://icons.iconarchive.com/icons/mirella-gabriele/fantasy-mediaeval/128/Poison-red-icon.png" />
</image>
</ImageView>
</graphic>
</Button>
</children>
</AnchorPane>
要在SceneBuilder中实现上述效果,将一个ImageView
拖到一个Button
上面,它会自动设置为按钮的图形。然后选择ImageView
并在SceneBuilder属性窗格中的ImageView图像字段中输入图像的URL。备用CSS属性
替代-fx-background*
属性的CSS。
-fx-graphic
-fx-padding
-fx-content-display
-fx-graphic-text-gap
这些只是不同��属性,不一定比你正在尝试做的更好。使用哪个取决于个人喜好。我发现这些设置比-fx-background*
设置更容��使用。它们更加严格,但语法和选项对我来说更容易理解,其含义映射到JavaDoc API的Labeled。
有关属性的详细说明在CSS参考指南中。
这是一个样式设置示例,其中嵌入了FXML图形,但最好将样式信息分离到单独的CSS样式表中,就像tarrsalah的示例一样。<Button layoutX="138.0" layoutY="226.0" mnemonicParsing="false" style="-fx-graphic: url('http://icons.iconarchive.com/icons/mirella-gabriele/fantasy-mediaeval/128/Poison-red-icon.png')" text="Love Potion">
<font>
<Font size="20.0" />
</font>
</Button>
仅使用Java代码将图像添加到按钮的相关解决方案
-fx-background-size: 100% 100%;
-fx-background-color: transparent;