2012-09-16 37 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