我正在尝试构建一个表单,其中可以将自己的值填充到JTextField中,或者依赖于预设选项,该选项取决于JComboBox中的选择。
这是JCombobox
String[] areas = new String [] {"Own Specifications", "SurveySample", "UK", "London", "Surrey"};
@SuppressWarnings({ "unchecked", "rawtypes" })
final JComboBox<String> selectedArea = new JComboBox(areas);
//selectedArea = new JComboBox<String>();
selectedArea.setModel(new DefaultComboBoxModel<String>(areas));
selectedArea.setBounds(282, 52, 164, 27);
contentPane.add(selectedArea);
这是JTextField
tenurePrivateRenters = new JTextField();
tenurePrivateRenters.setHorizontalAlignment(SwingConstants.CENTER);
tenurePrivateRenters.setText("Private Renters");
tenurePrivateRenters.setBounds(58, 213, 134, 28);
contentPane.add(tenurePrivateRenters);
根据用户的JComboBox选择,在JTextField中,该值应该更改,例如如果选择了Survey Sample,则JTextField的值应为10。
我尝试了以下两个选项:
selectedArea.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
Object selectedValue = selectedArea.getSelectedItem();
if(selectedValue.equals("Own Specifications")){
tenurePrivateRenters.setText("10");
System.out.println("Good choice!");
}
}
});
和
selectedArea.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e){
@SuppressWarnings("unchecked")
JComboBox<String> selectedArea = (JComboBox<String>) e.getSource();
String selectedItem = (String) selectedArea.getSelectedItem();
if(selectedItem.equals("Own Specifications")){
tenurePrivateRenters.setText("10");
System.out.println("Good choice!");
}
}
}
);
}
但是对于这两个选项都没有任何反应,JTextField的值仍然是“私人渲染器”。关于我出错的地方有什么想法吗?
答案 0 :(得分:0)
在itemStateChanged方法中,您有以下内容:
Object selectedValue = selectedArea.getSelectedItem();
getSelectedItem方法返回一个Object。然后,您调用Object的equals方法:
if(selectedValue.equals("Own Specifications")){
这肯定总是返回false,因为Object equals方法将String类型的对象与Object类型的对象进行比较。
相反,如果要将selectedValue与String进行比较:
String selectedValue = (String)selectedArea.getSelectedItem();
然后,if语句应该按预期工作。
答案 1 :(得分:0)
我已经尝试过你的代码,但它运行得很好。在尝试更改其值之前,您确定要将这些侦听器正确附加到组合框吗?尝试将它们正确地附加在构造函数中。