2013-07-06 2 views
0

поэтому у меня есть три разных класса ... первый - это рабочий стол jframe с панелью меню. второй - это jdialog, а последний - элемент меню. Я надеюсь передать результаты Jdialog на рабочий стол jframe, оттуда я хочу использовать эту информацию для создания нового элемента меню на рабочем столе Jframe.Статические/нестатические вопросы Java

Вот что у меня есть:

Desktop 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», чтобы создать экземпляр «newThing» из класса JDialog «NewThing». Затем отсюда вы нажимаете кнопку «Создать» в этом JDialog (который появляется на Jframe рабочего стола). Когда вы нажимаете кнопку, он создает новый элемент MenuItem, который будет добавлен в «thingEditMenu» для всей Jframe рабочего стола. Прямо сейчас моя ошибка находится в строке рабочего стола 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 

Если вы не пытаетесь вызвать getItem на clasas, а не объект, но поскольку метод не является статическим, что, конечно, won't работы , вы должны называть его объектом, который вы только что создали.

0

Метод, указанный как статический, не может обращаться к полям этого класса, если они не помечены как статические. Причина в том, что статический метод связан с классом - вам не нужен экземпляр класса для запуска этого кода. Когда статический метод запущен, поля класса, которые не являются статическими, не могут быть доступны, поскольку они связаны с экземпляром, а не с самим классом, как статический метод.