当我试图在actionPerformed方法中调用panel2时,我得到了nullpointerexception。请帮我摆脱这个愚蠢的麻烦。
public class PanelEventTest implements ActionListener {
/**
* @param args
*/
JFrame frame;
JPanel panel1, panel2;
String[] list = {"Sachin","Tarun","Vipin"};
JList jlist;
JButton next;
void originalFrame()
{
frame = new JFrame();
frame.setSize(500, 300);
frame.setVisible(true);
frame.setLayout(new FlowLayout());
frame.add(panel1());
frame.add(panel2());
}
JPanel panel1()
{
panel1 = new JPanel();
next = new JButton("Next");
next.addActionListener(new PanelEventTest());
panel1.add(next);
return panel1;
}
JPanel panel2()
{
panel2 = new JPanel();
jlist = new JList(list);
panel2.add(jlist);
panel2.add(new JLabel("Test"));
return panel2;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new PanelEventTest().originalFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand() == "Next")
{
panel2.removeAll();
}
}
}action event未附加panel2,这是导致此异常的原因吗?
发布于 2013-04-13 03:26:39
而不是
next.addActionListener(new PanelEventTest());你应该有
next.addActionListener(this);否则,事件侦听器将是PanelEventTest的另一个实例,其originalFrame()方法从未被调用过,因此其panel2变量为null。(请注意,即使调用了它的originalFrame()方法,它也会从它自己的panel2中删除所有内容,而不是从包含该按钮的框架的panel2中删除)。
你应该为你的监听器使用(匿名)内部类,而不是让框架本身成为一个监听器:
next.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel2.removeAll();
}
});发布于 2013-04-13 03:27:03
也许吧
next.addActionListener(this);
https://stackoverflow.com/questions/15979304
复制相似问题