2014-10-18 6 views
0

MenuButton 객체에서 선택한 MenuItem을 선택할 때 변수 값을 설정하려고합니다. 나는 이것을 찾으려고 노력했지만 빈손으로 나왔다. 여기 JavaFX FXML menuItem 액션

는 메뉴 아이템을 설정하는 코드이다 :

private ObservableList<MenuItem> templateMenuItems = FXCollections.observableArrayList(); 
@FXML private MenuButton menu = new MenuButton(); 

@FXML 
protected void getTemplates() throws IOException { 
    CaspReturn tls = this.socket.runCmd(new Tls("")); 
    String tlsList = tls.getResponse(); 
    String[] tlsListSplitt = tlsList.split("\\n"); 
    for (int i = 0; i < tlsListSplitt.length; i++) { 
     String[] tlsLine = tlsListSplitt[i].split("\""); 
     this.templateMenuItems.add(new MenuItem(tlsLine[1])); 
    } 
    this.menu.getItems().setAll(this.templateMenuItems); 
} 

나는 방법에 있어야 할이 menuItem 또는 scenebuilder에있는 필드에서 텍스트를 얻을 수있는 코드를 작성하는 방법을 잘 모르겠어요

답변

0
.

당신이 묻는 것은 명확하지 않지만 클릭했을 때 메뉴 항목의 텍스트를 알고 싶다고 가정합니다. 이를 위해서는 이벤트 핸들러를 메뉴 항목에 추가해야합니다. 의 ContextMenu를위한 JavaDoc에서 잘립니다 다음

MenuItem item1 = new MenuItem("About"); 
item1.setOnAction(new EventHandler<ActionEvent>() { 
    public void handle(ActionEvent e) { 
     System.out.println("About"); 
    } 
}); 

당신의 MenuItem에 캐스팅 이벤트 소스를 얻고 그에서 텍스트를 얻을 수 있습니다.

코드 작성시 실제 문제가 있습니다. getTemplates에서 외부 데이터베이스에 대한 호출이 있으며 @ FXML 요소로 구현되어 FXAT에서 실행된다는 것을 거의 보장합니다. 실제로는 정말 나쁜 것입니다.

데이터베이스 액세스가 작업에 포함되도록 리팩토링 한 다음 MenuItem 만들기가 작업의 onSucceeded 이벤트 처리기입니다. 그런 다음 ContextMenu를 인스턴스화하고 해당 이벤트 핸들러에 MenuItem을 설치해야합니다.

getTemplates() 메서드는 버튼의 onAction 이벤트로 호출해야합니다.

+0

고맙습니다. 전화를 걸기 전에 조치가 설정되고 호출 될 것이라고 생각했습니다. – Jocke

관련 문제