2016-12-13 13 views
4

私はタブパネルに2つのタブを持つJavaFXアプリケーションを持っています。そして、私は各タブにデフォルトボタン(defaultButton = "true"のボタン)を持たせたいと思います。ただし、Enterキーを押したときには、最初のタブのボタンだけが反応します。 2番目のタブのボタンはEnterキーの押下を無視します。JavaFXの複数のデフォルトボタン

仮説は:Oracleのdocumentation状態:シーン内の他のノードがそれを消費していない場合

デフォルトボタンは、キーボードVK_ENTER プレスを受信ボタンです。

したがって、両方のボタンが1つのシーンにあることが問題だと思います。 JavaFXで2つのタブを取得する方法を知っていますか?それぞれデフォルトのボタンが動作していますか?

答えて

5

デフォルトのボタンは1つだけです。現在選択されているタブのボタンをデフォルトのボタンにします。それぞれのタブの選択されたプロパティにリスナーを追加して、対応するボタンをデフォルトのボタンにするか、またはバインディングを使用して同じものを実現してください:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.Tab; 
import javafx.scene.control.TabPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class MultipleDefaultButtons extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     TabPane tabPane = new TabPane(); 
     tabPane.getTabs().addAll(createTab("Tab 1"), createTab("Tab 2")); 
     primaryStage.setScene(new Scene(tabPane, 400, 400)); 
     primaryStage.show(); 
    } 

    private Tab createTab(String text) { 
     Tab tab = new Tab(text); 
     Label label = new Label("This is "+text); 
     Button ok = new Button("OK"); 

     ok.setOnAction(e -> System.out.println("OK pressed in "+text)); 

     VBox content = new VBox(5, label, ok); 
     tab.setContent(content); 

     ok.defaultButtonProperty().bind(tab.selectedProperty()); 

     return tab ; 
    } 

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

プロパティを直接バインドする方が簡単でしょうか。 .defaultButtonProperty()。bind(tab.selectedProperty()) '? – VGR

+0

@VGRああ、ええ、それはよかった...更新されました。ありがとう。 –

関連する問題