我需要爲我的MenuItem
的圖標。JavaFX setGraphic()不在MenuItem中顯示圖標
這就像一個「工人階級」來獲得圖標的ImageView
:
public class IconFactory {
private static ImageView HLP_BOOK_JFX;
public enum ICONS {
BASCET_REMOVE, BASCET_PUT, SAVE, OPEN, ARROW_RIGHT, ARROW_LEFT, ARROW_UP, ARROW_DOWN, CLOCK, ANALOG_SIGNAL, DIGITAL_SIGNAL, REFRESH, GREEN_PLUS, NETWORK, OK, CANCEL, RIGHT_NAV2, LEFT_NAV2, PLAY, PAUSE, LIST_ADD, PAGE_FIND, SET_PARAM, DOWNLOAD, UPLOAD, LOG_FILE, WARNING, INFO, LOG_DIAG, DATA_TRANS, TREE, FILTER, SEARCH, PARAM, ERASE, RESETDEF, RESETDEF2, DEBUG_BUG, INTERNATIONAL, CLOSE, HLP_BOOK
}
public static ImageView getImage(ICONS en) {
switch (en) {
case HLP_BOOK:
if (HLP_BOOK_JFX == null)
HLP_BOOK_JFX = new ImageView(new Image(IconFactory.class.getResourceAsStream("help_book.png")));
return HLP_BOOK_JFX;
}
return null;
}
當我使用myMenuItem.setGraphic(IconFactory.getImage(ICONS.HLP_BOOK))
爲單菜單項它完美的作品。
但是,當我想要在循環中生成兩個菜單並設置相同的圖形時,一個MenuItem
沒有圖標顯示。(下面代碼中的第一個循環)。
我的代碼:
while (keys.hasMoreElements()) {
// that will do 2 loops, do not care about how
MenuItem subMenuHelp = new MenuItem("MenuItem");
subMenuHelp.setGraphic(IconFactory.getImage(ICONS.HLP_BOOK));
subMenuHelp.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
// do not care
openHelpFile(link);
}
});
System.out.println(((ImageView) subMenuHelp.getGraphic()).toString());
myMenu.getItems().add(subMenuHelp);
}
正如你所看到的,我添加了一個System.out.println
,看是否有圖形是爲當前項目設置。 結果在控制檯:兩線(菜單項)具有相同ImageView
:
[email protected][styleClass=image-view]
[email protected][styleClass=image-view]
我做了完全一樣的Swing中(但Icons
和.setIcons()
功能)和它的工作非常出色。我還尋找「重繪」功能強制顯示,但沒辦法。
希望你能幫助我!
哦如此!非常感謝您的快速幫助。 因此,我更新了我的IconFactory,以便在每次調用時返回新的ImageView,並且完美地工作。 –