2012-09-09 65 views
3

我對java很新。訪問另一個類的組件

我有一個類,我正在創建gui和另一個類(主類),我正在訪問gui類。在gui類中,我創建了一些組件並將它們返回。

GUI類,

 public class Gui { 

      public Component getTopPanelContent(){ 
       Jpanel jp = new Jpanel(); 
       JComboBox cbo1 = new JComboBox(); 
       JComboBox cbo2 = new JComboBox(); 
       JComboBox cbo3 = new JComboBox(); 
       JComboBox cbo4 = new JComboBox(); 
       JComboBox cbo5 = new JComboBox(); 
       JButton button = new JButton(); 

       jp.add(cbo1); 
       jp.add(cbo2); 
       jp.add(cbo3); 
       jp.add(cbo4); 
       jp.add(cbo5); 
       jp.add(button); 
       return jp; 
      } 
     } 

主類,

 public void addComponents(int id){ 
      Gui g = new Gui(); 
      Jpanel container = new Jpanel(); 

      if(id == 1){ 
       container.add(g.getTopPanelContent);  
      } 
     } 

高達該公司工作的罰款。

在主類中有一個JTextArea,每當我打開一個文件,我要顯示CBO1的國家列表,該文件包含有要顯示的國家名單,

 String[] countries = editArea.getContents().split("\n"); 

如何通過國家價值觀CBO1

感謝

回答

3

嗯,我usuall y看到一個具有swing組件作爲類屬性的GUI類。你做的東西像您的GUI中的「UTIL」類,所以你必須尋找你的JComboBox

我建議你去一個全功能的類來表示你的GUI,如:

import javax.swing.*; 

public class Gui extends JPanel { 

    private JComboBox cbo1 = new JComboBox(); 
    private JComboBox cbo2 = new JComboBox(); 
    private JComboBox cbo3 = new JComboBox(); 
    private JComboBox cbo4 = new JComboBox(); 
    private JComboBox cbo5 = new JComboBox(); 
    private JButton button = new JButton(); 

    public Gui() { 
     add(cbo1); 
     add(cbo2); 
     add(cbo3); 
     add(cbo4); 
     add(cbo5); 
     add(button); 
    } 
} 

而且,添加getters和setter ;-)。

如果你想保持你的代碼,你的方式,你可以通過索引搜索的組合框:

System.out.println(jp.getComponent(0)); 

或者,更好的,你能說出你的JComboBox,然後按名稱進行搜索:

cbo1.setName("countryCombo"); 
jp.add(cbo1); 

然後:

public Component findCbo1() { 
    for (Component comp : this.getComponents()) { 
     if(comp.getName() != null && comp.getName().equals("countryCombo")) { 
      return comp; 
     } 
    } 
    return null; 
} 
+0

這我指向我的帖子末尾的那種代碼。:) – javatarz

2

兩種方式做到這一點....

  • 充分利用CBO1的,static ...所以你將不得不聲明它在類範圍的方法之外...

    因此,這將是這樣的..

    for(String s: countries){ 
    
    Gui.cbo1.addItem(s); 
    
    
    } 
    
  • 或者使用Singleton principleGui類作爲Singleton,然後用Composition才能到JComboBox中訪問CBO1

1

您可以將您的組件後成爲類變量,並添加公共干將。這些獲得者將可以從你的主類訪問。

GUI類 - >

public class Gui { 
    private JPanel jp; 
    private JComboBox cbo1; 
    private JComboBox cbo2; 
    private JComboBox cbo3; 
    private JComboBox cbo4; 
    private JComboBox cbo5; 
    private JButton button; 

    public Component getTopPanelContent(){ 
     jp = new JPanel(); 
     cbo1 = new JComboBox(); 
     cbo2 = new JComboBox(); 
     cbo3 = new JComboBox(); 
     cbo4 = new JComboBox(); 
     cbo5 = new JComboBox(); 
     button = new JButton(); 

     jp.add(cbo1); 
     jp.add(cbo2); 
     jp.add(cbo3); 
     jp.add(cbo4); 
     jp.add(cbo5); 
     jp.add(button); 
     return jp; 
    } 

    /** 
    * @return the jp 
    */ 
    public JPanel getJp() { 
     return jp; 
    } 

    /** 
    * @return the cbo1 
    */ 
    public JComboBox getCbo1() { 
     return cbo1; 
    } 

    /** 
    * @return the cbo2 
    */ 
    public JComboBox getCbo2() { 
     return cbo2; 
    } 

    /** 
    * @return the cbo3 
    */ 
    public JComboBox getCbo3() { 
     return cbo3; 
    } 

    /** 
    * @return the cbo4 
    */ 
    public JComboBox getCbo4() { 
     return cbo4; 
    } 

    /** 
    * @return the cbo5 
    */ 
    public JComboBox getCbo5() { 
     return cbo5; 
    } 

    /** 
    * @return the button 
    */ 
    public JButton getButton() { 
     return button; 
    } 
} 

主類 - >

public void addComponents(int id){ 
    Gui g = new Gui(); 
    g.getCbo1().addItem("text"); 
} 

雖然這解決您的問題,它引出了一個問題,有沒有你要創建一個類只是一個具體的理由保存GUI組件?有更好的方法來處理比(特別是如果你的應用程序將是更大的組件

1

在這裏你可以做的是:

public class Gui { 
    public Component getTopPanelContent(){ 
     Jpanel jp = new Jpanel(); 
     JComboBox cbo1 = new JComboBox(); 
     ... 
     return jp; 
    } 

    public void addItemsToCBo1(String[] items){ 
     for(String item : items){ 
      cbo1.addItem(item); 
     } 
    } 
} 

主類:

public void addComponents(int id){ 
    Gui g = new Gui(); 
    Jpanel container = new Jpanel(); 

    if(id == 1){ 
     container.add(g.getTopPanelContent); 
     g.addItemsToCBo1(editArea.getContents().split("\n")); 
    } 
}