gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:38:43 28 4
gpt4 key购买 nike

我正在制作一个注册页面,但我对 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);
};

最佳答案

您可以采用与响应 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 常量,OTHER JComboBox 使用并在监听器中进行测试以确保测试的 String 和显示的 String 相同。
  • 同样,我建议您使用 setEnabled(...) 而不是 setEditable(...)
  • 您应该学习并遵循 Java 命名约定,包括所有变量名都以小写字母开头,因为这将有助于我们更好地理解您的代码。
  • 您应该修复发布的代码缩进,使其正常且有意义(注意上面我的代码与您的代码)。为什么你想让那些试图帮助你理解你的代码的人更难?您的工作是尽可能简化我们的工作,因为我们都是志愿者。
  • 创建并发布 sscce获得最好和最快的帮助。

关于java - 根据数组中的变量使标签可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18513046/

28 4 0