2017-10-24 8 views
0

私はvBoxに5つのラベルを持っています。私はクリックしたラベルを追跡するためのメソッドを作成したいと思います。今は、5つのメソッドを使用しています。それぞれのラベルに1つずつです。リスナーなどを使用する必要がありますか? 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> 

私のJavaメソッド:

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メソッドに委任することができます。これにより、後でバグの機会が減ります!理想的には、ユーザーとサービスクラス間のステートレスアダプターとしてコントローラーを実装したいと考えています。

関連する問題