2012-09-16 35 views
1

我一直在itemStateChanged部分有问题。当我编译程序时,我得到“无法找到变量”的错误,我似乎无法找出我做错了什么地方。任何帮助深表感谢。谢谢。Implementing ItemListener

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"; 
     } 
    } 
} 
+0

我不认为Java将只是说“无法找到变量”没有点变量缺失,请整个堆栈跟踪或错误线?在ItemStateChanged中,'code'没有在本地范围内声明,使它成为你的类的一个属性,并且使用'this.code来代替' – dbf

回答

0

在itemStateChanged,你是对是不知道的itemStateChanged()范围的变量调用.getSelectedItem(),其次我不认为你要调用一个String数组(code)这种方法,我想你改为使用e.getItem()e.getItemSelectable

查看ItemEvent

5

你的代码的文档有很多的问题,所以我必须完全在这里发布的解决方案。该修复:

声明的变量为成员变量

叫上comboboxgetSelectedItem(),而不是字符串数组

使用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"); 
    } 

} 
+0

非常感谢你,你的回答真的帮助了我=) – Pickle