我正在制作一个注册页面,但我对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);
};
答案 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);
}
}
});
一些问题和问题:
System.out.println(...)
以打印出所选项目,以确保侦听器按预期工作。.equals("Other...")
,字符串文字。而是考虑使一个String常量,JECboBox使用的OTHER,以及您在侦听器中测试以确保测试的String和显示的相同。setEnabled(...)
而不是setEditable(...)
。答案 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"));
}
);