2015-03-24 3 views
0

Я искал и увидел пару других вопросов, похожих на этот, но они на самом деле не отвечают на мой вопрос. У меня есть набор кнопок, которые все выглядят одинаково, и в настоящее время я меняю стиль на каждую кнопку по отдельности, так как:Стиль несколько кнопок сразу [Javafx]

button1.setBackground(background); 
button1.setPrefHeight(height); 
button1.setPrefWidth(width); 

button2.setBackground(background); 
button2.setPrefHeight(height); 
button2.setPrefWidth(width); 

И так далее. Я попытался следующий без толка:

templateButton.setBackground(background); 
templateButton.setPrefHeight(height); 
templateButton.setPrefWidth(width); 
button1 = templateButton; 
button2 = templateButton; 
button3 = templateButton; 

Но тогда я получаю ошибку о том, «дублирующие дети добавили», который я предполагаю, что означает кнопку 1/2/3 все точки к templateButton каких-то образом, вместо того, чтобы просто наследуя Свойства templateButton. Есть ли лучший способ сделать это, или я должен просто настроить их отдельно?

+0

'button1/2/3 = templateButton' указывает все эти ссылки на тот же объект (' templateButton'). – Oli

+0

@ Oli да, это то, что я думал, но я не закодировал через некоторое время, поэтому я немного ржавый и забыл некоторые технические/правильные имена вещей;) – Spekular

+0

Сообщество, как вам удалось выяснить, что этот вопрос дубликат того, который я пометил, если вы не настоящий человек: O. Причудливый материал, который я должен сказать. – CKing

ответ

-1

Просто используйте цикл:

for (Button b : Arrays.asList(button1, button2, button3)) { 
    b.setBackground(background); 
    b.setPrefHeight(height); 
    b.setPrefWidth(width); 
} 

Или создать свой собственный класс, который расширяет Button и установить свойство в конструкторе.

+0

Спасибо, это работает отлично! – Spekular

1

Рекомендуемый способ применения стиля к элементам управления в JavaFX - это использование CSS, желательно во внешней таблице стилей. Помимо хорошего разделения между кодом макета и кодом стиля, это также позволяет вам создавать сразу несколько узлов графика сцены.

Чтобы применить ко всем кнопкам в приложении, вы можете использовать

.button { 
    -fx-background-color: ... ; 
    -fx-pref-height: ... ; 
    -fx-pref-width: ... ; 
} 

Чтобы применить к избранной группе кнопок, вы можете дать эти кнопки класс стиля:

Button button1 = new Button(...); 
Button button2 = new Button(...); 
Button button3 = new Button(...); 

Stream.of(button1, button2, button3).forEach(button -> 
    button.getStyleClass().add("my-style")); 

А потом селектор в файле css становится

.my-style { 
    -fx-background-color: ... ; 
    /* etc */ 
} 

Или, если все кнопки находятся в определенном макете, Вы можете выбрать все кнопки в панели макета:

Button button1 = new Button(...); 
Button button2 = new Button(...); 
Button button3 = new Button(...); 

VBox buttons = new VBox(button1, button2, button3); 
buttons.getStyleClass().add("button-container"); 

, а затем селектор CSS является

.button-container > .button { 
    /* styles.... */ 
} 
Смежные вопросы