2017-12-21 2 views
1

세 가지 다른 버튼이 사용하는 방법을 설정하려고합니다. 나는 그들 중 어느 것을 눌렀는지에 따라 세 가지 다른보기 중 하나를로드하려고합니다. 이렇게하려면 버튼 자체를 인수로 전달하는 방법에 대해 생각했습니다. 하지만 javaFX가 새로운 인수로 메소드를 인식하지 못해서 불가능했습니다.눌려진 버튼의 fx : id를 확인하십시오

발신자 버튼의 fx:id을 어떻게 구별 할 수 있습니까? 여기 내가 지금까지 가지고있는 것이있다. 난 그저 그 일을 할 것이다 pressed 변수를 초기화해야합니다.

if (pressed == edgeModify){ 
    loader = new FXMLLoader(getClass().getResource("/digitalia/view/edgeView.fxml")); 
} else if (pressed == sectionModify){ 
    loader = new FXMLLoader(getClass().getResource("/digitalia/view/sectionView.fxml")); 
} else { 
    loader = new FXMLLoader(getClass().getResource("/digitalia/view/LayerView.fxml")); 
} 
+1

다른 버튼 동작으로 다른 작업을 수행하려는 경우 각 버튼에 대해 다른 버튼 동작을 사용하지 않는 이유는 무엇입니까? –

+0

다른 URL을 사용하는 것과는 완전히 똑같은 일을 할 수도 있기 때문에 저는이 방법으로 구현할 수 있다고 생각했습니다. 그래도 각각의 작업을 개별적으로 수행하는 것이 더 쉽습니다. –

+0

@ A.Gimeno이 경우, 다른 핸들러는 단 한 번의 메소드 일 수 있습니다. 모두 공통 메소드를 호출하지만 다른 URL을 매개 변수로 전달합니다. –

답변

2

당신은 아래의 버튼의 ID를 얻을 수 있습니다.

1

이 같은 이벤트 객체의 소스를 사용할 수 있습니다

button.setOnAction(e -> {if (e.getSource() == button) System.out.println("button was pressed.");}); 

당신의 위의 예에서 당신은 단지 e.getSource()pressed를 교환해야합니다.

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

더 쉬운 방법은 바로 버튼에 대해 서로 다른 처리기를 사용하는 것입니다 :

1

각 단추마다 다른 처리기를 사용하십시오. 로이 간단 할 것 같습니다 : 당신이 정말이 하나의 방법으로이 작업을 수행하려면

@FXML 
private void loadEdgeView(ActionEvent event) { 
    load("edgeView"); 
} 

@FXML 
private void loadSectionView(ActionEvent event) { 
    load("sectionView"); 
} 

@FXML 
private void loadLayerView(ActionEvent event) { 
    load("layerView"); 
} 

private void load(String view) { 
    FXMLLoader loader = new FXMLLoader("/digitalia/view/" + view + ".fxml"); 
    // ... 
} 

, 당신은 버튼의 userData을 활용할 수있다; 즉 :

<Button text="Load Edge View" onAction="#loadView" userData="edgeView" /> 
<Button text="Load Section View" onAction="#loadView" userData="sectionView" /> 
<Button text="Load Layer View" onAction="#loadView" userData="layerView" /> 

를 다음 컨트롤러 :

@FXML 
private void loadView(ActionEvent event) { 
    Node node = (Node) event.getSource(); 
    String view = (String) node.getUserData(); 
    FXMLLoader loader = new FXMLLoader("/digitalia/view/" + view + ".fxml"); 
    // ... 
} 

내가 별도의 핸들러를 사용하여 상세 작은 가격에 더 많은 유지 보수라고 생각합니다.

관련 문제