我在itemStateChanged部分遇到了问题。当我编译这个程序时,我得到了“找不到变量”的错误,而且我似乎找不到哪里做错了。任何帮助都是非常感谢的。谢谢。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Postcode extends JFrame implements ItemListener {
public static void main(String[] arg) {
JFrame fr = new JFrame("Melaka Postcode");
fr.setSize(240, 125);
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public Postcode() {
String[] code = {"75450", "77000", "78000"};
JLabel lb1 = new JLabel("Postcode");
JLabel lb2 = new JLabel("District?");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JComboBox cb = new JComboBox(code);
cb.addItemListener(this);
Font f = new Font("Verdana", Font.BOLD, 14);
lb2.setFont(f);
p1.add(lb1);
p1.add(cb);
p2.add(lb2);
}
public void itemStateChanged(ItemEvent e) {
if (code.getSelectedItem().equals("75450")) {
lb2.setText = "Bukit Beruang";
}
if (code.getSelectedItem().equals("77000")) {
lb2.setText = "Jasin";
}
if (code.getSelectedItem().equals("75450")) {
lb2.setText = "Alor Gajah";
}
}
}发布于 2012-09-17 03:25:42
你的代码有很多问题,所以我必须在这里发布完整的解决方案。修复方法:
将变量声明为成员变量
在combobox上调用getSelectedItem(),而不是在字符串数组上
正确使用JLabel.setText()
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Postcode extends JFrame implements ItemListener {
String[] code = { "75450", "77000", "78000" };
JLabel lb1 = new JLabel("Postcode");
JLabel lb2 = new JLabel("District?");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JComboBox cb = new JComboBox(code);
public static void main(String[] arg) {
JFrame fr = new JFrame("Melaka Postcode");
fr.setSize(240, 125);
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public Postcode() {
cb.addItemListener(this);
Font f = new Font("Verdana", Font.BOLD, 14);
lb2.setFont(f);
p1.add(lb1);
p1.add(cb);
p2.add(lb2);
}
public void itemStateChanged(ItemEvent e) {
if (cb.getSelectedItem().equals("75450"))
lb2.setText("Bukit Beruang");
if (cb.getSelectedItem().equals("77000"))
lb2.setText("Jasin");
if (cb.getSelectedItem().equals("75450"))
lb2.setText("Alor Gajah");
}
}发布于 2012-09-17 03:23:04
在itemStateChanged中,你在一个itemStateChanged()作用域未知的变量上调用.getSelectedItem(),其次,我不认为你想在字符串数组(code)上调用这个方法,我认为你应该使用e.getItem()或e.getItemSelectable。
请参阅ItemEvent上的文档
发布于 2021-08-22 11:34:13
编辑:在我自己的代码中发现了类似的奇怪行为。尝试使用switch语句重写代码,而不是使用多个if语句。
public void itemStateChanged(ItemEvent e) {
switch(cb.getSelectedItem().toString()){
case "75450":
lb2.setText("Bukit Beruang");
break;
case "77000":
lb2.setText("Jasin");
break;
case "75451": //Changed this into a unique value
lb2.setText("Alor Gajah"); //because the switch statements
break; //will throw error when supplied
} //with repeated values
}让我知道它是否对你有效!
https://stackoverflow.com/questions/12449792
复制相似问题