1

我有一个需要在屏幕上打印出来的对象的 ArrayList。我有一个按钮和一个侦听器,它们应该调用一个扩展 JPanel 的类中的方法,该 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));     
    }
4

2 回答 2

1

orderPanel在调用之前你没有分配任何东西orderPanel.addLCheese()

于 2012-04-12T00:39:39.517 回答
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();

        }
  }); 
于 2012-04-12T00:40:20.757 回答