Java 带有JPanel的Nullpointerexception
当我试图在actionPerformed方法内调用panel2时,我得到的是nullpointerexception。请帮我摆脱这个愚蠢的prblmJava 带有JPanel的Nullpointerexception,java,swing,nullpointerexception,jpanel,Java,Swing,Nullpointerexception,Jpanel,当我试图在actionPerformed方法内调用panel2时,我得到的是nullpointerexception。请帮我摆脱这个愚蠢的prblm public class PanelEventTest implements ActionListener { /** * @param args */ JFrame frame; JPanel panel1, panel2; String[] list = {"Sachin","Tarun
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();
}
}
}
panel2未附带操作事件,这是导致此异常的原因吗?而不是
next.addActionListener(new PanelEventTest());
你应该
next.addActionListener(this);
否则,事件侦听器将是PanelEventTest的另一个实例,其originalFrame()
方法从未被调用,因此其panel2
变量为null。(请注意,即使调用了它的originalFrame()
方法,它也会从自己的panel2中删除所有内容,而不是从包含按钮的框架的panel2中删除)
您应该更喜欢为侦听器使用(annonymous)内部类,而不是使框架本身成为侦听器:
next.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel2.removeAll();
}
});
而不是
next.addActionListener(new PanelEventTest());
你应该
next.addActionListener(this);
否则,事件侦听器将是PanelEventTest的另一个实例,其originalFrame()
方法从未被调用,因此其panel2
变量为null。(请注意,即使调用了它的originalFrame()
方法,它也会从自己的panel2中删除所有内容,而不是从包含按钮的框架的panel2中删除)
您应该更喜欢为侦听器使用(annonymous)内部类,而不是使框架本身成为侦听器:
next.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel2.removeAll();
}
});
也许吧
next.addActionListener(此)代码>可能
next.addActionListener(此)代码>@Sachin-Lal,为了帮助您使用而不是删除和添加新的JPanelTY,我的问题解决了。我的下一个问题是,如果我创建了三个类,一个用于originalFrame,一个用于Panel1,另一个用于Panel2,那么如何实现/调用/传递事件?我已经粘贴了代码@plz check out guys.@Sachin Lal,为了使用而不是删除和添加新的JPanelTY来获得帮助,我的这个问题得到了解决。我的下一个问题是,如果我创建了三个类,一个用于originalFrame,一个用于Panel1,一个用于Panel2,那么如何实现/调用/传递事件?我已经粘贴了代码@plz check out guys.欢迎来到stackoverflow。请将您的问题更新为stacktracewelcome to stackoverflow错误。请用stacktrace错误更新您的问题