2017-12-21 11 views
1

3つの異なるボタンで使用する方法を設定しようとしています。私はそれらのどれが押されたかに応じて3つの異なるビューのうちの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この場合、異なるハンドラは単純に1行のメソッドで、すべて共通のメソッドを呼び出しますが、別のURLをパラメータとして渡します。 –

答えて

2

あなたは以下のようにボタンのIDを取得することができます:

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

より簡単なアプローチは、単にボタンに別のハンドラを使用することです。

1

あなたは、このようにイベントオブジェクトのソースを使用することができます。

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

をあなたの上記の例ではあなただけe.getSource()pressedを交換する必要があります。

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"); 
    // ... 
} 

私は別のハンドラを使用すると、冗長性の小さな価格のため、より保守だと思います。

関連する問題