2012-04-12 85 views
1

我有一個需要在屏幕上打印出來的對象的ArrayList。我有一個按鈕和一個監聽器,它應該在擴展JPanel的類中調用一個方法,該方法將添加到MainFrame類中。來自不同類別的調用方法

這是我想調用AddOrderPanel類的方法。

public void addLCheese(){ 
     BigDecimal price = new BigDecimal("8.99"); 
     CheesePizza largeCheese = new CheesePizza("Large Cheese/Tomato",price); 
     OrderItem laCheese = new OrderItem(largeCheese,1); 
     System.out.println(largeCheese.getDescription()+" "+largeCheese.getPrice()+" " +laCheese.testArray()); 
      JPanel order = new JPanel(); 
     order.setBackground(Color.blue); 
     order.setPreferredSize(new Dimension(800,50)); 
     add(order,BorderLayout.CENTER); 
    revalidate(); 

} 

這是我的監聽器代碼:

 lCheese.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e) { 
AddOrderPanel orderPanel; 
       orderPanel.addLCheese(); 

      } 
     }); 

當我嘗試它,它返回NullPointerException異常,想法?

我的面板對象。

private JFrame myMainFrameObject; 
    AddOrderPanel(JFrame theMainFr){ 
    myMainFrameObject = theMainFr; 
      this.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
     setBackground(Color.red); 
     setPreferredSize(new Dimension(800,0));  
    } 

回答

1

你不是叫orderPanel.addLCheese()之前分配orderPanel任何東西。

1

在你的聽衆做出這種變化得到的JFrame,然後創建AddOrderPanel

的新實例
lCheese.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      Component component = (Component) e.getSource(); 
      JFrame frame = (JFrame) SwingUtilities.getRoot(component); 
      AddOrderPanel orderPanel = new AddOrderPanel(frame); 
      orderPanel.addLCheese(); 

     } 
    }); 
+0

我不能這樣做,因爲我AddOrderPanel的代碼需要一個框架。 @編輯問題 – ChrisA 2012-04-12 00:42:59

+0

@ChrisA:編輯我的答案以反映您的約束。 – 2012-04-12 00:52:36

+0

非常感謝你,先生!:) – ChrisA 2012-04-12 00:58:42