2012-04-12 20 views
1

Ich habe eine ArrayList von Objekten, die auf dem Bildschirm ausgedruckt werden müssen. Ich habe eine Schaltfläche und einen Listener, der eine Methode in einer Klasse aufrufen sollte, die JPanel erweitert, das in einer MainFrame-Klasse hinzugefügt wird.Aufruf Methode aus verschiedenen Klassen

Dies ist die Methode, die ich in einer Klasse namens AddOrderPanel aufrufen möchte.

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(); 

} 

Und das ist mein Zuhörer Code:

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

      } 
     }); 

Wenn ich versuche, es kehrt Nullpointer, Ideen?

Mein Panel-Objekt.

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

Antwort

1

Sie sind nicht orderPanel zu etwas zuweisen, bevor orderPanel.addLCheese() aufrufen.

1

In Ihrem Zuhörer machen diese Änderung die JFrame zu bekommen und dann eine neue Instanz von AddOrderPanel erstellen

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

Ich kann das nicht tun, da der Code für meine AddOrderPanel einen Rahmen erfordert. @Edited Frage – ChrisA

+0

@ChrisA: Bearbeitete meine Antwort, um Ihre Einschränkung widerzuspiegeln. –

+0

Ich werde dir sehr danken, Sir! :) – ChrisA

Verwandte Themen