2014-12-15 4 views
1

JDK 8에 JavaFX 응용 프로그램을 작성하고 있습니다. 응용 프로그램에 일부 단추가있는 메뉴와 도구 모음이 있습니다. 문제는 메뉴가 열리고 툴바 버튼을 다루는 경우 툴바 버튼의 아이콘이 사라집니다. 버튼 기능이 변경되지 않고 툴팁이 올바르게 표시되며 아이콘 만 누락됩니다. 이미지를 넣고이를 보여줍니다JavaFX - 도구 모음 버튼의 아이콘이 사라짐

enter image description here

내가 UI 스레드 해제 도구 모음 단추를 만들 수 있지만 UI 스레드에서 도구 모음에 추가합니다.

// this is off UI thread 
newFileButton = new Button(); 
newFileButton.setId(JFXFileMenuConstants.NEW_FILE_TOOLBAR_BUTTON); 
newFileButton.setGraphic((Node) handler.getResource("jfx.gui.file.new.menuitem.icon")); 
    newFileButton.setTooltip(new Tooltip(handler.getString("jfx.gui.toolbar.newfile.tooltip"))); 
......... 
    ToolBar filesToolbar = new ToolBar(newFileButton, openFileButton, separator, saveFileButton, saveasFileButton); 

    Platform.runLater(() -> { 
     toolbarContainer.getChildren().add(toolbar); 
    }); 

어떤 원인 일 수 있습니까?

+0

응용 프로그램 스레드에서 전체 코드를 실행하면 어떻게됩니까? – javaHunter

+0

문제를 설명하는 SSCCCE (작은 실행 가능한 예제)가 없으면 전혀 알 수 없습니다. – kleopatra

+0

큰 코드의 일부인 OSGI 모듈이므로 한 번에 전체 코드를 실행할 수 없습니다. 툴바는 실제로 다른 OSGI 번들에 추가됩니다. SSCCCE에서와 같은 점은 나머지 코드가 다른 OSGI 번들에 있기 때문에 제공 할 수 없습니다. – vdjurovic

답변

0

글쎄, 내 자신의 질문에 대답하기 위해, 문제는 리소스 로딩에있었습니다. 아이콘을 Image 대신 ImageView으로로드했습니다.

newFileButton.setGraphic((Node) handler.getResource("jfx.gui.file.new.menuitem.icon")); 

newFileButton.setGraphic(new ImageView((Image)handler.getResource("jfx.gui.file.new.menuitem.icon"))); 

에 모든 일 : 나는

{"jfx.gui.file.new.menuitem.icon", new Image(this.getClass().getClassLoader().getResource("/icons/filenew.png").toString()) }, 

이 변경이 줄 때 자원 번들에서 나는

{"jfx.gui.file.new.menuitem.icon", new ImageView(this.getClass().getClassLoader().getResource("/icons/filenew.png").toString()) }, 

했다. 여러분의 제안에 감사드립니다.

+2

어떤 일이 일어 났는지 설명하기 : Node를 SceneGraph에 한 번만 추가 할 수 있습니다. ImageView는 노드이며 분명히 SceneGraph에 두 번 추가하려고했습니다 (Menu + ToolBar). Image를 사용하고 그것의 ImageView를 생성하는 것은 이것을 방지합니다. – eckig

+0

당신 말이 맞아요. 정확히 무슨 일이 일어 났습니까. 다음 번에 더 잘 알 수 있습니다 :-) – vdjurovic

관련 문제