2017-04-02 10 views
0

動的ユーザーインターフェイスを開発しようとしています。ユーザがあるインジケータをクリックすると、そのインジケータのグラフがいくつかの操作ボタンとともにインスタンス化される。例については、画像を参照してください。グラフはHBoxで作成され、ボタンとともにVBoxに追加されます。私が解決できない問題は、ボタンをクリックすると、どのように対応する要素にアクセスできますか?動的ユーザーインターフェイスでGUI要素にアクセスする方法

問題は、単にこれに沸く:

Button buttonRemove = new Button(); 
    buttonRemove.setMinWidth (80); 
    buttonRemove.setText ("Remove"); 
    buttonMap.getProperties().put ("--IndicatorRemoveButton", indicator.getName()); 
    buttonRemove.setOnAction (e -> buttonRemoveClick()); 

    private Object buttonRemoveClick() 
    { 
     // Which button clicked me?? 

     return null; 
    } /*** buttonRemoveClick ***/ 

すべてのヘルプは大歓迎されます。私はこれに固執しています。

Example of dynamic interface

+0

の子に達するまで、このために、あなたは親に通過することができ、追加しますbutton.setOnActionイベントハンドラ。 – Sedrick

+0

これは私が今コードで見ることができるようにしています。私が今やっていることとは違う何かをしなければならないのですか? – Arnold

+0

要素を言うとき、あなたはどういう意味ですか? – Sedrick

答えて

1

ラムダのbuttonRemoveClickメソッドにパラメータを渡すことができます。有効な最終パラメータまたはパラメータである限りです。

private void buttonRemoveClick (HBox group) {...} 
buttonRemove.setOnAction (e -> buttonRemoveClick (theGroup)); 

この場合、あなたはまたButtonを取得するために、ソースをActionEventを渡し、得ることができます。これは、要素を除去するのに十分ではないかもしれないが、あなたは動的にボタンを作成した後、あなたのコードでHBox

private void buttonRemoveClick (ActionEvent event) { 
    Node currentNode = (Node) event.getSource(); // this is the button 

    // traverse to HBox of container 
    Node p; 
    while ((p = currentNode.getParent()) != containerVBox) { 
     currentNode = p; 
    } 
    // remove part including the Button from container 
    containerVBox.getChildren().remove(currentNode); 
} 
buttonRemove.setOnAction (this::buttonRemoveClick); 
+0

あなたは私の一日を救った!私はあなたの2番目の方法を使用し、それは素晴らしいです。ボタンを含むHBoxを作成するときには、ボタンにプロパティの情報を指定して識別します。私は以前に説明したこの解決策を見ましたが、それを働かせることができませんでしたので、あなたの明確な説明のために多くの感謝! – Arnold

関連する問題