Ответ 1
Решение, использующее только fxml
Как указывает тарсала, css - это рекомендуемый способ сделать это, хотя вы также можете сделать это в fxml, если хотите:
<?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
и введите URL-адрес изображения в поле изображения ImageView в области свойств SceneBuilder.
Откройте приведенный выше файл fxml в SceneBuilder, чтобы увидеть изображение ниже.
Альтернативные атрибуты css
Замените css на атрибуты -fx-background*
.
-
-fx-graphic
-
-fx-padding
-
-fx-content-display
-
-fx-graphic-text-gap
Это просто разные, не обязательно лучше для того, что вы пытаетесь сделать. Это всего лишь предпочтение в использовании. Я считаю эти настройки более удобными, чем настройки -fx-background*
. Они более ограничительны, но синтаксис и параметры намного легче понять, а их значения сопоставляются с API JavaDoc для 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