0

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

这是我所拥有的:

桌面 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(出现在桌面 Jframe 上)中单击一个名为“创建”的按钮。当您单击该按钮时,它会创建一个新的 MenuItem,该菜单项将添加到整个 Desktop Jframe 的“thingEditMenu”中。现在我的错误出现在桌面 Jframe“thingEditMenu.add(NewThing.getItem());”的行中。它说我不能对非静态方法“getItem”进行静态引用。问题是我希望不要将其设为静态,因为 MenuItem 的信息会随着用户在该 JDialog 中的输入而改变。那么我怎样才能使它成为静态而不实际使其成为静态呢?还有没有人有更好的方法来编写代码以便我可以整合?

4

2 回答 2

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

如果不是,您试图调用getItemclasas,而不是对象,但由于该方法不是静态的,当然不会起作用,您必须在创建之前调用它的对象。

于 2013-07-06T23:31:48.677 回答
0

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

于 2013-07-06T23:36:25.517 回答