2

私はこれでユーザーからの入力を取得しようとします:

int myNumber = Integer.parseInt((String) JOptionPane.showInputDialog(
                            frame,
                            "Number you want:\n",
                            "Enter number",
                            JOptionPane.PLAIN_MESSAGE,
                            null,
                            null,
                            "5"));

うまく機能しますが、ユーザーがフィールドに数字を入力するかどうかはわかりませんNumberFormatException。スローされたくありません。

formatteraをに設定する方法はありますか ( aを設定して a をJOptionPane持つテキスト フィールドに対してできるように) ?JFormattedTextFieldDecimalFormat

4

3 に答える 3

2

簡単な答え: いいえ、それを行う方法はありません。JOptionPane は、閉じる前に入力を検証する手段を提供しません。

これを回避する簡単な方法の 1 つは、JSpinner を使用することです。JOptionPane を使用すると、コンポーネントと配列をメッセージ オブジェクトとして使用できるため、次のようなことができます。

int min = 1;
int max = 10;
int initial = 5;

JSpinner inputField =
    new JSpinner(new SpinnerNumberModel(initial, min, max, 1));

int response = JOptionPane.showOptionDialog(frame,
    new Object[] { "Number you want:\n", inputField },
    "Enter number",
    JOptionPane.OK_CANCEL_OPTION,
    JOptionPane.PLAIN_MESSAGE,
    null, null, null);

if (response == JOptionPane.OK_OPTION) {
    int myNumber = (Integer) inputField.getValue();
    // Do stuff with myNumber here
} else {
    System.out.println("User canceled dialog.");
}

また、提案したように、JSpinner の代わりに JFormattedTextField をメッセージ オブジェクトとして渡すこともできます。

于 2013-05-14T18:28:32.367 に答える
1

値を編​​集する方法については、自動ダイアログ クローズの停止に関する Swing チュートリアルを参照してください。

または、JOptionPane API を調べてください。多分使用:

showConfirmDialog(Component parentComponent, Object message, String title, int optionType) 

メッセージは Swing コンポーネントにすることができます。

于 2013-05-14T18:26:04.217 に答える