Есть несколько способов сделать это, я расскажу о своих избранных.
Используйте ToggleButton и применяйте к нему собственный стиль. Я предлагаю это, потому что ваш требуемый элемент управления «как кнопка переключения», но выглядит просто отличным от стиля кнопки переключения по умолчанию.
. Мой предпочтительный метод заключается в определении графика кнопки в css:
.toggle-button {
-fx-graphic: url('http://icons.iconarchive.com/icons/aha-soft/desktop-buffet/128/Pizza-icon.png');
}
.toggle-button:selected {
-fx-graphic: url('http://icons.iconarchive.com/icons/aha-soft/desktop-buffet/128/Piece-of-cake-icon.png');
}
ИЛИ используйте прилагаемый css для определения фонового изображения.
// file imagetogglebutton.css deployed in the same package as ToggleButtonImage.class
.toggle-button {
-fx-background-image: url('http://icons.iconarchive.com/icons/aha-soft/desktop-buffet/128/Pizza-icon.png');
-fx-background-repeat: no-repeat;
-fx-background-position: center;
}
.toggle-button:selected {
-fx-background-image: url('http://icons.iconarchive.com/icons/aha-soft/desktop-buffet/128/Piece-of-cake-icon.png');
}
Я предпочитаю спецификацию -fx-graphics по спецификациям -fx-background- * в качестве правил для стиля фона изображения сложны, и настройка фона не позволяет автоматически размер кнопки для изображения, тогда как установка рисунка делает.
И некоторый пример кода:
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.StackPaneBuilder;
import javafx.stage.Stage;
public class ToggleButtonImage extends Application {
public static void main(String[] args) throws Exception { launch(args); }
@Override public void start(final Stage stage) throws Exception {
final ToggleButton toggle = new ToggleButton();
toggle.getStylesheets().add(this.getClass().getResource(
"imagetogglebutton.css"
).toExternalForm());
toggle.setMinSize(148, 148); toggle.setMaxSize(148, 148);
stage.setScene(new Scene(
StackPaneBuilder.create()
.children(toggle)
.style("-fx-padding:10; -fx-background-color: cornsilk;")
.build()
));
stage.show();
}
}
Некоторые преимущества этого :
Альтернативный вариант - не использовать css и использовать ToggleButton, но установить графику изображения в коде:
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.scene.*;
import javafx.scene.control.ToggleButton;
import javafx.scene.image.*;
import javafx.scene.layout.StackPaneBuilder;
import javafx.stage.Stage;
public class ToggleButtonImageViaGraphic extends Application {
public static void main(String[] args) throws Exception { launch(args); }
@Override public void start(final Stage stage) throws Exception {
final ToggleButton toggle = new ToggleButton();
final Image unselected = new Image(
"http://icons.iconarchive.com/icons/aha-soft/desktop-buffet/128/Pizza-icon.png"
);
final Image selected = new Image(
"http://icons.iconarchive.com/icons/aha-soft/desktop-buffet/128/Piece-of-cake-icon.png"
);
final ImageView toggleImage = new ImageView();
toggle.setGraphic(toggleImage);
toggleImage.imageProperty().bind(Bindings
.when(toggle.selectedProperty())
.then(selected)
.otherwise(unselected)
);
stage.setScene(new Scene(
StackPaneBuilder.create()
.children(toggle)
.style("-fx-padding:10; -fx-background-color: cornsilk;")
.build()
));
stage.show();
}
}
Основанный на кодах подход имеет то преимущество, что вам не нужно использовать css, если вы несовместимы с ним.
Для лучшей производительности и удобства переноса на беззнаковые апплеты и в виде песочницы webstart свяжите изображения с вашим приложением и ссылаться на них по относительным URL-адресам пути, а не загружать их из сети.
Обычно я создаю файл с именем AssemblyVersionInfo.cs, который включается в качестве ссылки во все проекты. Я заставляю этот файл содержать атрибуты версии и удаляю те же атрибуты из обычных файлов AssemblyInfo.cs. Затем вы можете обновить номера версий только в одном файле и сделать так, чтобы все проекты имели одинаковый номер.
Чтобы добавить файл как ссылку; Щелкните правой кнопкой мыши проект в проводнике решений, выберите «Добавить» -> «Существующий элемент ...». Перейдите к файлу, затем щелкните маленькую стрелку у правого края кнопки добавления и выберите «Добавить как ссылку» в раскрывающемся меню.
Один из способов сделать это - создать основной скрипт сборки, который использует задачу AssemblyInfo для установки номера версии во время сборки ( http://code.msdn.microsoft.com/AssemblyInfoTaskvers ) и затем определите номера версий как свойства в скрипте msbuild.