1

私は登録ページを作成していますが、Java にはかなり慣れていません。「Mr、Mrs、Miss など」などの人のタイトルのコンボ ボックスがあり、オプションの 1 つは「その他...」です。テキスト フィールドがあります。コンボ ボックスの横にあるタイトルを指定するには、コンボ ボックスで [その他...] を選択しない限りテキスト フィールドを編集できないようにしたいのですが、どうすればよいですか?

現時点ではどのように見えるか: 何が間違っているのかわかりませんか?

TitleSpecifyChoiceField.setEditable(false);
    TitleSpecifyChoiceField.setText("Please specify title...");


    TitleChoice.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Mr", "Mrs", "Miss", "Ms", "Dr", "Other..." }));
    TitleChoice.setToolTipText("");
    TitleChoice.addItemListener(new ItemListener(){
        public void itemStateChanged(ItemEvent e) {


if (TitleChoice.getSelectedItem().equals("Other...")){
TitleSpecifyChoiceField.setEditable(true);
    };
4

3 に答える 3

3

これは、JComboBox の変更に対応するのと同じ方法で行います。つまり、 Swing コンボ ボックスのチュートリアルに従って JComboBox にリスナーを追加します。リスナー内setEnabled(...)で、選択した項目に応じて JTextField の設定を変更します。つまり、JComboBox を呼び出して、呼び出しが truegetSelectedItem()かどうかをテストします。equalsIgnoreCase("other")

前者は、JTextField を編集する必要があるかどうかについてユーザーに視覚的な手がかりを与えるため、setEnabled(...)notを使用することをお勧めします。setEditable(...)



あなたのコードに関して編集:

TitleSpecifyChoiceField.setEditable(false);
TitleSpecifyChoiceField.setText("Please specify title...");

TitleChoice.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Mr", "Mrs", "Miss", "Ms", "Dr", "Other..." }));
TitleChoice.setToolTipText("");
TitleChoice.addItemListener(new ItemListener(){
  public void itemStateChanged(ItemEvent e) {
    if (TitleChoice.getSelectedItem().equals("Other...")){
      TitleSpecifyChoiceField.setEditable(true);
    }
  }
});

いくつかの問題と問題:

  • JComboBox は文字列を使用していますか、それとも他のタイプのアイテムを保持していますか?
  • 問題を切り分けるために、コードにデバッグ コードを追加する必要があります。たとえば、ItemListener 内に a を追加System.out.println(...)して、選択したアイテムを出力し、リスナーが期待どおりに動作していることを確認します。
  • item .equals("Other...")、文字列リテラルかどうかを確認しています。代わりに、JComboBox が使用する文字列定数 OTHER を作成し、リスナーでテストして、テストされた文字列と表示される文字列が同じであることを確認することを検討してください。
  • 繰り返しますが、setEnabled(...)notを使用することをお勧めしますsetEditable(...)
  • すべての変数名を小文字で始めるなど、Java の命名規則を学習して従う必要があります。これにより、コードをよりよく理解するのに役立ちます。
  • 投稿されたコードのインデントを修正して、規則的で意味のあるものにする必要があります(上記のコードとあなたのコードに注意してください)。あなたのコードを理解するのを助けようとしている人たちを難しくしたいのはなぜですか? 私たちは皆ボランティアなので、あなたの仕事は私たちをできるだけ簡単にすることです.
  • sscceを作成して投稿すると、最善かつ最速のヘルプが得られます。
于 2013-08-29T14:01:32.797 に答える
0

コンボ ボックスにリスナーを追加します。setEditable()選択した項目が変更されたら、テキスト フィールドを呼び出します。

于 2013-08-29T14:01:18.697 に答える
0

and に (@HovercraftFullOfEels が示唆するように) を追加してみItemListenerてください。一般的な考え方としては、次のようなことができます。JComboBoxsetEnabledsetEditable

    JTextField textField = ...;
    JComboBox<String> comboBox = ...;
    comboBox.addItemListener(
            new ItemListener(){
                public void itemStateChanged(ItemEvent e){
                    final String selected = (String)comboBox.getSelectedItem();
                    textField.setEnabled(selected.equals("other"));
                }
            }
    );

または、Java 8 を使用している場合は、次のように使用できます。

    JTextField textField = ...;
    JComboBox<String> comboBox = ...;
    comboBox.addItemListener(
            e -> {
                final String selected = (String)comboBox.getSelectedItem();
                textField.setEnabled(selected.equals("other"));
            }
    );
于 2013-08-29T14:10:10.230 に答える