2014-06-19 2 views
2

이 개체에 대한 이벤트 처리기 안에 클릭 한 개체의 ID를 가져 오는 더 나은 방법을 찾고 있습니다. 더 나은 방법 JavaFX 컨트롤러에서 클릭 한 개체의 ID를 얻으려면

나는 이미이 발견

javafx pass fx:id to controller or parameter in fxml onAction method

을하지만 나를 위해 작동하지 않았다. 지금은이 같은 노드 클래스의 getId() 함수를 사용하고

:

Button btn = (Button) event.getSource(); 
String id = btn.getId(); 

는하지만 난 버튼에뿐만 아니라이 방법을 사용하고 싶습니다.

+0

버튼, 레이블 및 기타 컨트롤을 클릭 할 때'id' 또는'fx : id'를 가져 오시겠습니까? – ItachiUchiha

+0

fx : id를 얻고 싶습니다. –

+0

왜 fx : id를 컨트롤에 넣으시겠습니까? 'fx : id'는 컨트롤러의 컨트롤과 바인드하기 위해 fxml에서 사용됩니다. 'fx : id'를 얻는 것은 의미가 없습니다. fx : id를 가져 오는 이유를 알 수 있습니까? – ItachiUchiha

답변

7

fx : id는 FXML과 Controller 사이의 컨트롤을 바인딩하는 데 사용되므로 OP가 클릭 할 때 id 컨트롤을 원한다는 점을 고려하여이 대답을 고려합니다.

import javafx.application.Application; 
import javafx.event.Event; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.Control; 
import javafx.scene.control.Label; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class IdForControlsOnClick extends Application{ 

    @Override 
    public void start(Stage stage) throws Exception { 
     BorderPane borderPane = new BorderPane(); 
     VBox vBox = new VBox(20); 
     borderPane.setCenter(vBox); 

     Button button = new Button("Hi"); 
     button.setId("Button"); 
     Label label = new Label("Label"); 
     label.setId("Label"); 
     CheckBox checkBox = new CheckBox(); 
     checkBox.setId("CheckBox"); 

     button.addEventHandler(MouseEvent.MOUSE_CLICKED, new MyEventHandler()); 
     label.addEventHandler(MouseEvent.MOUSE_CLICKED, new MyEventHandler()); 
     checkBox.addEventHandler(MouseEvent.MOUSE_CLICKED, new MyEventHandler()); 

     vBox.getChildren().addAll(button, label, checkBox); 
     Scene scene = new Scene(borderPane, 200, 200); 
     stage.setScene(scene); 
     stage.show(); 

    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

    private class MyEventHandler implements EventHandler<Event>{ 
     @Override 
     public void handle(Event evt) { 
      System.out.println(((Control)evt.getSource()).getId()); 
     } 
    } 
} 
+0

클릭 한 개체가 Control을 확장 한 경우에만 작동합니다. Button과 Label은 모두 같지만 MenuItem과 같은 다른 항목은 그렇지 않습니다. –

2

동일한 이벤트 코드를 공유하는 ImageView 개체의 ID를 가져 오는 데 사용합니다. 여기

@FXML 
    private void selectImage(MouseEvent event) 
    { 
    String source1 = event.getSource().toString(); //yields complete string 
    String source2 = event.getPickResult().getIntersectedNode().getId(); //returns JUST the id of the object that was clicked 
    System.out.println("Full String: " + source1); 
    System.out.println("Just the id: " + source2); 
    System.out.println(" " + source2); 
    } 

내가 '프레스에 마우스'는에 selectImage 방법을 지정하는 이벤트를 SceneBuilder를 사용하여 내 상황, 다음 코드를 실행하고 무작위로 삼을 클릭의 출력 : 여기 된 MouseEvent를 사용하여 간단한 예입니다 다른 이미지 뷰 객체 :

Full String: ImageView[id=iv1, styleClass=image-view] Just the id: iv1
Full String: ImageView[id=iv4, styleClass=image-view] Just the id: iv4
Full String: ImageView[id=iv6, styleClass=image-view] Just the id: iv6

나는이 사람을 도움이되기를 바랍니다. :-)

관련 문제