实现ItemListener

时间:2012-09-16 19:03:51

标签: java swing jframe jpanel itemlistener

我在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";
        }
    }
}

2 个答案:

答案 0 :(得分:5)

您的代码存在很多问题,因此我必须完全在此处发布解决方案。修复:

将变量声明为成员变量

getSelectedItem()上调用combobox,而不是在String

数组上调用

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

}

答案 1 :(得分:0)

在itemStateChanged中,您在.getSelectedItem()范围内未知的变量上调用itemStateChanged(),其次我不认为您想在String数组上调用此方法({{ 1}}),我认为您使用的是codee.getItem()

请参阅ItemEvent

上的文档