2013-04-12 67 views
0

當我嘗試在actionPerformed方法內調用panel2時,我得到nullpointerexception。 Plz幫助我擺脫這種愚蠢的感覺。Nullpointerexception與JPanel

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,是這個異常背後的原因?

+0

歡迎計算器。好心地更新您的問題與錯誤stacktrace –

回答

3

而不是

next.addActionListener(new PanelEventTest()); 

你應該有

next.addActionListener(this); 

否則,事件偵聽器將PanelEventTest的另一實例,其originalFrame()方法從來沒有被調用,並且其panel2變量因此爲空。 (請注意,即使調用了其originalFrame()方法,它也會從面板2的自己的中刪除所有內容,而不是從包含按鈕的框架的面板2中刪除)。

你應該更喜歡使用(annonymous)內部類你的聽衆,而不是使框架本身的監聽器:

next.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     panel2.removeAll(); 
    } 
}); 
+1

@Sachin拉爾和使用[CardLayout(一堆關於下一個和上一個按鈕的例子)](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)而不是刪除並添加新的JPanel – mKorbel

+0

TY的幫助,我的這個問題解決了。我的下一個問題是,如果我爲originalFrame創建三個類,一個用於Panel1,一個用於Panel2,那麼如何實現/調用/傳遞事件? –

+0

我粘貼了代碼@ http://stackoverflow.com/questions/15986208/nullpointerexception-continues plz檢查出來的傢伙。 –

1

也許

next.addActionListener(this);