根据数组中的变量使标签可编辑

时间:2013-08-29 13:59:29

标签: java swing combobox jtextfield

我正在制作一个注册页面,但我对Java很新,我有一个组合框用于人们的标题,如"先生,夫人,小姐等等#34;其中一个选项是"其他......"我在组合框旁边有一个文本字段来指定您的标题,我希望文本字段不可编辑,除非有人选择"其他..."在组合框中,我该怎么做?

目前看起来像什么: 我无法看到我做错了什么?

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);
    };

3 个答案:

答案 0 :(得分:3)

您可以按照与JComboBox中的任何更改相同的方式执行此操作 - 通过根据Swing combo box tutorial向JComboBox添加侦听器。在侦听器内部,根据所选项目更改JTextField上的setEnabled(...)设置。即,通过调用JComboBox上的getSelectedItem()并测试调用equalsIgnoreCase("other")是否为真。

请注意,我建议您使用setEnabled(...)而非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(...)以打印出所选项目,以确保侦听器按预期工作。
  • 您正在检查项目.equals("Other..."),字符串文字。而是考虑使一个String常量,JECboBox使用的OTHER,以及您在侦听器中测试以确保测试的String和显示的相同。
  • 我再次建议您使用setEnabled(...)而不是setEditable(...)
  • 您应该学习并遵循Java命名约定,包括以小写字母开头所有变量名称,因为这有助于我们更好地理解您的代码。
  • 你应该修改你发布的代码缩进,以便它是常规的并且有意义(请注意我上面的代码与你的代码)。为什么你想让那些试图帮助你理解代码的人更难?我们的工作就是让我们尽可能轻松,因为我们都是志愿者。
  • 创建并发布sscce以获得最佳和最快的帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以尝试向ItemListener添加JComboBox,并且(建议使用@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"));
            }
    );