2016-02-25 15 views
1

此代碼與我正確合作,但是這是怎麼發生的?我是如何讓JMenu的4個對象命名爲(菜單)的同名?我需要理解,即使它工作,並且這個代碼是編寫代碼的好方法,還是更好?這是如何工作在oop java?

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 

public class Window extends JFrame { 

    private static final String TITLE = "DevTools"; 
    private static final int WIDTH = 800; 
    private static final int HEIGHT = 600; 

    private JMenuBar menubar; 
    private JMenu menu; 
    private JMenuItem menuitem; 
    private String[] menu_titles = {"File", "Edit", "Diagrams", "Help"}; 

    public Window(){ 
     init(); 
     createMenu(); 
    } 

    public void init(){ 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     this.setExtendedState(MAXIMIZED_BOTH); 
     this.setResizable(true); 
     this.setSize(WIDTH, HEIGHT); 
     this.setLocationRelativeTo(null); 
     this.setTitle(TITLE); 
    } 

    public void createMenu(){ 
     menubar = new JMenuBar(); 
     setJMenuBar(menubar); 

     for(int j = 0; j < menu_titles.length; j++){ 
      menu = new JMenu(menu_titles[j]); 
      menubar.add(menu); 
     } 

     this.setVisible(true); 
    } 

} 
+0

這是魔術! –

回答

6

我是怎麼做的JMenu的對象4名爲這是相同的名稱(菜單)

menu沒有任何對象的名稱。 menu只是您用來臨時存儲對每個新創建的JMenu實例的引用的變量。您可以爲其分配任意數量的引用。它將最後舉行最新的一次。

由於您創建的每個JMenu實例都被添加到menubarJMenuBar,所以最終會出現一個包含多個JMenu實例的菜單欄。

1

我怎麼做JMenu的4個對象命名這是你沒有相同的名稱(菜單)

。您使用了menu實例字段四次,每次都覆蓋它的前一個值。它指的是你分配給它的最後一個JMenu

menu在該代碼中根本不應該是實例字段。它應該是createMenu(甚至在createMenufor循環內)中的局部變量,因爲一旦createMenu完成並且您已將所有菜單添加到菜單欄中,就不應使用該變量。

+0

你的意思是我在功能createmenu裏面聲明瞭私人的JMenu菜單嗎?當我設置關鍵聽衆時,我不會再使用它嗎? –

+0

@AhmedNader:是的,這就是我的意思。您可以在'createMenu'的'for'循環中指定關鍵字偵聽器,或者根據需要從'JMenuBar'中獲取'JMenu'實例,或者將它們保存在您保存在實例字段中的數組中。 –

+0

我想我會將它移動到createMenu()函數中,並將偵聽器添加到它裏面,正如你所說的......謝謝你的幫助..我以爲我知道OOP,但現在我猜不到:) –

1

JAVA有兩個詞,實際上這兩個詞有很大的區別。所以請不要混淆這兩個術語:----

  1. 參考變量。
  2. 實際對象。

    private JMenu menu; //這裏的菜單是一個引用變量而不是對象。

    menu = new JMenu(menu_titles [j]); // 關鍵字負責創建一個對象。這個新的Object引用實際上是由menu引用變量組成的。

現在的時間來解釋的循環代碼,其中u實際上混淆

  for(int j = 0; j < menu_titles.length; j++){ 
      menu = new JMenu(menu_titles[j]); // at each iteration 
       // new keyword is responsible to creating a different Object. 
      //and refers to menu reference variable actually. 
      menubar.add(menu); //add new JMenu to menubar. 
     } 

說明: - 在每次迭代new關鍵字負責創建一個不同的Object。並實際參考菜單引用變量。menubar.add(menu);這部分代碼將新對象menu添加到menubar

它只是認爲有3-4個成員站在行中,將事情傳遞給下一個,最後一個人將東西扔進beanbox。每次迭代都是通過不同的人傳遞的,但是事物保持不變,只有引用被改變,並且該事物的最終位置是beanbox

這裏beanbox菜單欄可以容納多個menu對象。而傳遞事物的人就像參考變量一樣。

仔細閱讀你會得到這個概念。謝謝你.. :)

+0

謝謝很多 。我不知道我自己的代碼有所有的解釋。所有我知道的是,我想這種方式是使用資源的好方法:)謝謝你的解釋。 –