我有以下代码:
public class OrdemProducaoDialog extends Application implements Initializable{
@FXML
private VBox content;
@FXML
private Button btBuscaOrdem;
@FXML
private Button btBuscaLote;
...
@Override
public void initialize(URL location, ResourceBundle resources) {
String style = "-fx-font-size: 42px; -fx-fill: white;";
GlyphIcon<?> searchIcon = GlyphsBuilder.create(FontAwesomeIcon.class)
.glyph(FontAwesomeIcons.SEARCH)
.style(style)
.build();
btBuscaOrdem.graphicProperty().setValue(searchIcon);
btBuscaLote.graphicProperty().setValue(searchIcon);
}
上面代码的链接结果
如何从一个节点到两个按钮使用相同的引用,以便图标转到两个按钮?
答案 0 :(得分:0)
正如James_D已经假设的那样:GlyphIcon是一个节点。
它是FontAwesomeFX的一部分。班级GlyphIcon延伸 JavaFX Text和Text扩展Shape,Shape扩展Node。
Node
|
-> Shape
|
-> Text
|
-> GlyphIcon
在Node's JavaDoc中提示
如果程序将子节点添加到父节点(包括组,区域, 等)并且该节点已经是不同父节点或子节点的子节点 在场景的根,自动(并静默)删除节点 它的前任父母。
因此,您无法将一个 GlyphIcon实例设置为一个按钮的图形。
您需要为每个GlyphIcon创建一个自己的实例,并使用正确的样式设置大小。
public class FXMLController implements Initializable {
@FXML
private Button btBuscaOrdem;
@FXML
private Button btBuscaLote;
@Override
public void initialize(URL url, ResourceBundle rb) {
// number of buttons
int iconsSize = 2;
// the glyph to set
FontAwesomeIcon glyph = FontAwesomeIcon.SEARCH;
/*
* the style to set, glyph have two styleable properties:
*
* -glyph-size
* -glyph-name
*/
String style = "-fx-fill: white; -glyph-size: 42px;";
// where the icon instances will be stored;
GlyphIcon<?>[] icons = new GlyphIcon<?>[iconsSize];
// create instances
for (int i = 0; i < icons.length; i++) {
icons[i] = GlyphsBuilder.create(FontAwesomeIconView.class)
.glyph(glyph)
.style(style)
.build();
}
btBuscaOrdem.setGraphic(icons[0]);
btBuscaLote.setGraphic(icons[1]);
// two possibilities to only show graphic
btBuscaOrdem.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
btBuscaLote.setStyle("-fx-content-display: graphic-only;");
}
}
享受按钮!