3

私はJava/JavaFXの初心者です(昨日の夜から始めました)。MySQLデータベースを読み取る動的GUI(クラッド)を構築しています。

  • データをテーブルに表示し、各行の横にボタンを追加することができました。
  • ボタンの数は可変なので、共通のイベントハンドラーのみを定義したいと思います。

問題は、event.getSource()(これはActionEventです)を使用して表示するたびに、「Button [id = 0、styleClass=button]」のようなものが表示されることです。

質問1:IDを変数に入れる方法はありますか?オブジェクトからそれを取り出すことができません。

生成されたすべてのボタンが同じ変数名を持っていたため、この「if(event.getSource()== somebutton){...}」のようなことはできないため、私が知る限り、idを使用する必要があります。

これが、ボタンを作成するループ(make_buttonsというメソッド内)です。n_buttonsは、作成するボタンの数です。

for(int counter = 0; counter < n_buttons; counter++){
        String newtext = new String("btn"+counter);
        Button btn = new Button();
        btn.setText(newtext);
        btn.setId(Integer.toString(counter));
        btn.setOnAction(myHandler);
        grid.add(btn,0,counter);
    }

グリッドペインにボタンを重ねて配置していることに注意してください。

その部分の前に、ハンドラーがあります。

    final EventHandler<ActionEvent> myHandler = new EventHandler<ActionEvent>(){

    public void handle(final ActionEvent event) {
        Object new_output = event.getSource();
        System.out.println(new_output);
        event.consume();
        }
    };

質問2:では、特定のケースでどのボタンがイベントを発生させたかをどのように区別できますか?

私はかなりの数のプログラミング言語(Matlab、R、Python、C、Assemblyなど...しかし私は愛好家です)を知っていますが、GUI要素(Web言語とActionScript 3を除く)を扱うのは初めてです。actionscriptでは、event.getCurrentTargetのようなことを実行して、IDやプロパティなどを読み取るためのオブジェクト自体であるかのように正確に使用できます。

私はいたるところを見て何も見つかりませんでした(多分私の用語は少し近似的でした...)。

4

1 に答える 1

6

私があなたの質問を正しく理解している場合は、次のコードを使用して、ハンドルメソッドのクリックされたボタンにアクセスするだけです。

Object source = event.getSource();
if (source instanceof Button) { //should always be true in your example
    Button clickedBtn = (Button) source; // that's the button that was clicked
    System.out.println(clickedBtn.getId()); // prints the id of the button
}
于 2012-09-03T12:52:19.103 に答える