Это может быть не очень легко и элегантно реализовать, но вы можете попробовать это.Вам нужен какой-то класс синглтона.Вы можете изменить фактическую реализацию синглтона, если вам нужно, чтобы она была поточно-ориентированной и т. Д.
public class ButtonSizeManager {
private ButtonSizeManager instance;
private ButtonSizeManager() {}
public static final ButtonSizeManager getInstance() {
if (instance == null) instance = new ButtonSizeManager();
return instance;
}
private static final double LARGE_WIDTH = 100;
private static final double LARGE_HEIGHT = 30;
/* Similar constants for medium and small sizes */
private final ReadOnlyDoubleWrapper width = new ReadOnlyDoubleWrapper();
private final ReadOnlyDoubleWrapper height = new ReadOnlyDoubleWrapper();
public final void largeSize() {
width.set(LARGE_WIDTH);
height.set(LARGE_WIDTH);
}
/* Similar methods for medium and small */
public final ReadOnlyDoubleProperty widthProperty() {
return width.getReadOnlyProperty();
}
public final double getWidth() { this.width.get(); }
public final ReadOnlyDoubleProperty heightProperty() {
return height.getReadOnlyProperty();
}
public final double getHeight() { this.height.get(); }
}
Тогда все ваши кнопки (да, это будет утомительно) будут привязаны к этому.Это означает, что если у вас есть кнопки, созданные из FXML, вам нужно дать им fx:id
в FXML и получить их введенную ссылку в классе контроллера.
public class Controller {
@FXML private Button foo;
public void initialize() {
foo.setMinWidth(Region.USE_PREF_SIZE);
foo.setMinHeight(Region.USE_PREF_SIZE);
foo.setMaxWidth(Double.MAX_VALUE);
foo.setMaxHeight(Double.MAX_VALUE);
foo.prefWidthProperty.bind(ButtonSizeManager.getInstance().widthProperty());
foo.prefHeightProperty.bind(ButtonSizeManager.getInstance().heightProperty());
}
}
Если вы не хотите делать так много длякаждой кнопкой, затем вы можете переместить некоторые коды в ButtonSizeManager
.
public final bindButtonSize(Button button) {
Objects.requireNonNull(button);
button.setMinWidth(Region.USE_PREF_SIZE);
button.setMinHeight(Region.USE_PREF_SIZE);
button.setMaxWidth(Double.MAX_VALUE);
button.setMaxHeight(Double.MAX_VALUE);
button.prefWidthProperty.bind(widthProperty());
button.prefHeightProperty.bind(heightProperty());
}
Чтобы изменить размер, просто вызовите метод в классе singleton (например, ButtonSizeManager.largeSize()
)