所以我有三个不同的类......第一个是带有菜单栏的桌面jframe。第二个是jdialog,最后一个是menuitem。我希望将Jdialog的结果传递给桌面jframe,从那里我想使用该信息在桌面Jframe中创建一个新的menuitem。
这就是我所拥有的:
桌面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”的按钮(显示在桌面Jframe上)。当您单击该按钮时,它会创建一个新的MenuItem,该MenuItem将添加到整个Desktop Jframe的“thingEditMenu”中。现在我的错误是在桌面Jframe“thingEditMenu.add(NewThing.getItem());”中。它说我不能对非静态方法“getItem”进行静态引用。问题是我希望不要使这个静态,因为MenuItem的信息将随着用户在该JDialog中的输入而改变。那么如何在不实际静态的情况下使其静止?还有没有人有更好的方法来编码,以便我可以巩固?
答案 0 :(得分: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
,而不是对象,但由于该方法不是静态的,当然不会起作用,你必须在创建之前调用它的对象
答案 1 :(得分:0)
列为static的方法无法访问该类的字段,除非它们被标记为静态。原因是静态方法与类相关联 - 您不需要类的实例来运行该代码。运行静态方法时,无法访问非静态类的字段,因为它们与实例关联,而不是类本身,如静态方法。