2016-04-16 31 views
3

ユーザにアクションの実行を確認する必要があります。確認ダイアログのボタンのセットは、「はい」、「いいえ」、および「キャンセル」です。私のコードは以下の通りです:JavaFX 8 Alertで特定のボタンの順序を指定する方法

private ButtonType askYesNoCancel(String question) { 
    Alert alert = new Alert(AlertType.CONFIRMATION); 
    alert.setContentText(question); 
    alert.getButtonTypes().setAll(ButtonType.YES, 
            ButtonType.NO, 
            ButtonType.CANCEL); 
    return alert.showAndWait().get(); 
} 

私が直面しています問題は関係なく、私はAlertためButtonType秒を指定するどのような順序で、私は同じボタンの順番を得ることである私に

Asking Yes/No/Cancel confirmation

を与えます(いいえ - キャンセル - はい)。私はAlertButtonButtonTypeのAPIドキュメントを見て、答えを見つけられませんでした。

私が達成しようとしているのは、ボタンの注文です - いいえ - キャンセルします。何かアドバイス?

答えて

2

答えを確認してください:Enter Key Event Is Not Working On Dialog In Javafx?、私はこの質問にもっと適切に答えると思いますが、おそらく何が起こっているのかを完全には説明していません。 ButtonBar javadocも読んでください。

基本的にボタンの位置は、各ボタンのButtonTypeとButtonBarのbuttonOrderの組み合わせによって決まります。これらのいずれかを変更することで、異なるボタンレイアウトになります。

私が思い起こせば、ButtonBarをカスタマイズするのは難しいことでした。アラートをサブクラス化してcreateButtonBarを上書きする必要があります。

私が達成しようとしているのは、ボタンの順序です - いいえ - キャンセルしてください。何かアドバイス?

私のアドバイスは:ボタンの順序をカスタマイズしようとしないで、システムのデフォルトの注文を適用させてください。ボタンの順序は、さまざまなオペレーティングシステム用のダイアログの標準的なボタンレイアウトと一致するように、事前に設定されています。その標準から逸脱するようにボタンの順序を並べ替えると、あなたのアプリケーションをユーザーのために少しだけ混乱させるかもしれません(それはかなり主観的な意見です)。その後、

2

例あなたが本当にボタンの順序を指定する必要がある場合は...

private static class FixedOrderButtonDialog extends DialogPane { 
    @Override 
    protected Node createButtonBar() { 
     ButtonBar node = (ButtonBar) super.createButtonBar(); 
     node.setButtonOrder(ButtonBar.BUTTON_ORDER_NONE); 
     return node; 
    } 
} 

そして、あなたはあなたのアラートを作成します。

alert.setDialogPane(new FixedOrderButtonDialog()); 
関連する問題