2017-10-24 12 views
0

vBox에 5 개의 레이블이 있습니다. 클릭 한 레이블을 추적하는 방법을 만들고 싶습니다. 지금은 각 레이블에 하나씩 5 가지 방법을 사용하고 있습니다. 청취자 또는 다른 것을 사용해야합니까? Here is a fragment of my program.클릭 된 레이블을 추적하십시오 - JavaFx

내 fxml 코드 :

<VBox layoutX="13.0" layoutY="106.0" prefHeight="117.0" prefWidth="68.0" spacing="8.0"> 
    <children> 
     <Label fx:id="firstLabelTime" onMouseClicked="#setFirstLabelTime" text="Input time" /> 
     <Label fx:id="secondLabelTime" onMouseClicked="#setSecondLabelTime" text="Label" /> 
     <Label fx:id="thirdLabelTime" onMouseClicked="#setThirdLabelTime" text="Label" /> 
     <Label fx:id="fourthLabelTime" onMouseClicked="#setFourthLabelTime" text="Label" /> 
     <Label fx:id="fifthLabelTime" onMouseClicked="#setFifthLabelTime" text="Label" /> 
    </children> 
    </VBox> 

내 자바 방법 :

private Label tempLabelTime; 
@FXML 
private void setFirstLabelTime() { 
     tempLabelTime = firstLabelTime; 
     openTimePicker(); 

} 

@FXML 
private void setSecondLabelTime() { 
    tempLabelTime = secondLabelTime; 
    openTimePicker(); 
} 

@FXML 
private void setThirdLabelTime() { 
    tempLabelTime = thirdLabelTime; 
    openTimePicker(); 
} 

답변

0

당신은 일반적인 이벤트 핸들러로 된 MouseEvent를 주입 할 수 있습니다. 이처럼 :

@FXML 
private void labelClicked(MouseEvent e) { 
    Label label = (Label) e.getSource(); // this is the label that initiated the event 
    openTimePicker(label);    // openTimePicker knows what to do with each label clicked 
} 

또한 label.getId() 또는 label.getText()을 통과 할 수있다.

또한 this Stack Overflow discussion on JavaFx mouse events을 참조하십시오.

마지막으로 클래스 수준 필드를 임시 변수로 사용하지 않는 것이 좋습니다. 대신 컨트롤러가 상태를 유지할 수 있도록 레이블 특정 로직을 openTimePicker 메소드에 위임 할 수 있습니다. 이렇게하면 나중에 버그를 줄일 수 있습니다! 이상적으로는 사용자와 서비스 클래스 간의 상태 비 저장 어댑터로 컨트롤러를 구현하려고합니다.