3

私はJavaが初めてです。

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

まあ、私は通常、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); 
    }
}

また、ゲッターとセッターを追加します;-)。

コードを自分のやり方で維持したい場合は、コンボボックスをインデックスで検索できます。

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クラスを として使用してから、JComboBox cbo1 へのアクセスを取得するためにSingleton使用します。Composition

于 2012-09-09T15:43:44.447 に答える
1

コンポーネントを上に移動してクラス変数にし、パブリック ゲッターを追加できます。これらのゲッターは、メイン クラスからアクセスできます。

グイクラス ->

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 に答える