2013-07-06 106 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

列爲靜態的方法無法訪問該類的字段,除非它們被標記爲靜態。原因是靜態方法與類關聯 - 您不需要該類的實例來運行該代碼。當運行靜態方法時,不能訪問非靜態類的字段,因爲它們與實例關聯,而不是像靜態方法那樣的類本身。