1

画面に出力する必要があるオブジェクトの ArrayList があります。MainFrame クラスに追加された JPanel を拡張するクラスのメソッドを呼び出すボタンとリスナーがあります。

これは、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 に答える