静态/非静态问题Java

时间:2013-07-06 23:26:54

标签: java user-interface

所以我有三个不同的类......第一个是带有菜单栏的桌面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中的输入而改变。那么如何在不实际静态的情况下使其静止?还有没有人有更好的方法来编码,以便我可以巩固?

2 个答案:

答案 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的方法无法访问该类的字段,除非它们被标记为静态。原因是静态方法与类相关联 - 您不需要类的实例来运行该代码。运行静态方法时,无法访问非静态类的字段,因为它们与实例关联,而不是类本身,如静态方法。