1

我正在创建一个注册页面,但我对 Java 还很陌生,我有一个组合框,用于显示“先生、夫人、小姐等”等人的头衔,其中一个选项是“其他……”而且我有一个文本字段在组合框旁边指定您的标题,我希望文本字段不可编辑,除非有人在组合框中选择“其他...”,我该怎么做?

此刻的样子:我看不出我做错了什么?

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 上的设置。即,通过调用getSelectedItem()JComboBox 并测试调用是否equalsIgnoreCase("other")为真。

请注意,我建议您使用setEnabled(...)not setEditable(...),因为前者会为用户提供关于是否应该编辑 JTextField 的视觉提示。


编辑
关于您的代码:

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 中,添加一个System.out.println(...)以打印出所选项目,以确保侦听器按预期工作。
  • 您正在检查 item 是否.equals("Other...")为 String 文字。相反,请考虑创建一个字符串常量,即 JComboBox 使用的 OTHER 并且您在侦听器中进行测试,以确保测试的字符串和显示的字符串相同。
  • 同样,我建议您使用setEnabled(...)not setEditable(...)
  • 您应该学习并遵循 Java 命名约定,包括以小写字母开头的所有变量名称,因为这将有助于我们更好地理解您的代码。
  • 您应该修复您发布的代码缩进,使其正常且有意义(请注意我上面的代码与您的代码)。为什么你想让那些试图帮助你理解你的代码的人更难?你的工作是让我们的工作尽可能简单,因为我们都是志愿者。
  • 创建并发布sscce以获得最佳和最快的帮助。
于 2013-08-29T14:01:32.797 回答
0

您可以尝试ItemListener在您的JComboBoxand (如@HovercraftFullOfEels 建议的)使用setEnabled中添加一个,而不是setEditable. 一般来说,您可以执行以下操作:

    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 回答
0

将侦听器添加到组合框。当所选项目发生变化时,调用setEditable()文本字段。

于 2013-08-29T14:01:18.697 回答