2013-07-06 35 views
0

所以我有三个不同的类......第一个是带菜单栏的桌面jframe。第二个是jdialog,最后一个是菜单项。我希望将Jdialog的结果传递给桌面jframe,从那里我想使用该信息在桌面Jframe中创建一个新的菜单项。静态/静态问题Java

以下是我有:

桌面的JFrame(称为 “DesktopFrame”):

 thingAddMenu.addActionListener(
    new ActionListener() 
    { 
    public void actionPerformed(ActionEvent event) 
    { 
     newThing = new NewThing(DesktopFrame.this); 
     newSem.setVisible(true); 
     thingEditMenu.add(NewThing.getItem()); 
     thingMenu.add(thingEditMenu); 
     bar.add(thingMenu); 
    }//end method actionPerformed 
}// end anonymous inner class 
);//end addActionListener 

JDialog类的(称为 “NewThing”):

btnCreate.addActionListener(new ActionListener() 
    { 

     public void actionPerformed(ActionEvent e) 
     { 
      item = new thingMenuItem(timeframe,num); 

      dispose(); 
     } 
    }); 
    getContentPane().add(GenInfo, BorderLayout.NORTH); 
    pack(); 
    setResizable(false); 
    setLocationRelativeTo(parent); 
} 
public int getNum() 
{ 
    return num; 
} 
public JMenuItem getItem() 
{ 
    return item; 
} 
public String getTime() 
{ 
    return timeframe; 
} 

JMenuItem类(称为“thingMenuItem”):

public class thingMenuItem extends JMenuItem 
    { 

public thingMenuItem(String name, int num) 
{ 
    super(name); 
    addActionListener(

      new ActionListener() // anonymous inner class 
      { 
       public void actionPerformed(ActionEvent event) 
       { 
        //do some task 
       } // end method actionPerformed 
      } // end anonymous inner class 
     ); // end call to addActionListener 
} 

} 

这只是整个代码的一部分。这个想法是,你点击“thingAddMenu”从JDialog类“NewThing”创建一个“newThing”实例。然后从这里,您单击此JDialog中出现的一个名为“Create”的按钮(出现在Desktop Jframe上)。当你点击按钮时,它会创建一个新的MenuItem,它将被添加到整个Desktop Jframe的“thingEditMenu”中。现在我的错误是在桌面Jframe的一行“thingEditMenu.add(NewThing.getItem());”。它说我无法对非静态方法“getItem”进行静态引用。问题是我希望不要使这个静态,因为MenuItem的信息会随着用户在该JDialog中的输入而改变。那么我怎样才能让它变成静态的,而不是实际上变成静态的?也有人有更好的方式来编码,这样我可以巩固?

回答

1

变化

newThing = new NewThing(DesktopFrame.this); 
    newSem.setVisible(true); 
    thingEditMenu.add(NewThing.getItem()); 

newThing = new NewThing(DesktopFrame.this); 
    newSem.setVisible(true); 
    thingEditMenu.add(newthing.getItem()); //variable name in lower case written 

如果不是你想呼吁clasas,不是对象getItem,但由于该方法是不是静态的该课程不需额外工作,您必须将其称为您之前创建的对象。

0

列为静态的方法无法访问该类的字段,除非它们被标记为静态。原因是静态方法与类关联 - 您不需要该类的实例来运行该代码。当运行静态方法时,不能访问非静态类的字段,因为它们与实例关联,而不是像静态方法那样的类本身。