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

谢谢

4

4 回答 4

3

好吧,我通常看到一个 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); 
    }
}

此外,添加 getter 和 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;
}
于 2012-09-09T15:53:05.780 回答
2

有两种方法可以做到......

  • 将 cbo1 设置为static...因此您必须在 Class 范围内的方法之外声明它...

    所以会是这样。。

    for(String s: countries){ 
    
     Gui.cbo1.addItem(s);
    
    
     }
    
  • 或使用Singleton principleGui类设置为Singleton,然后使用Composition获取对 JComboBox cbo1 的访问权限

于 2012-09-09T15:43:44.447 回答
1

您可以将组件向上移动以成为类变量并添加公共 getter。这些 getter 可以从您的主类中访问。

桂类->

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 组件是否有特定的原因?有比这更好的方法来处理组件(特别是如果您的应用程序将变得更大。

于 2012-09-09T15:57:08.553 回答
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"));
    }
}
于 2012-09-09T16:08:03.053 回答