Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing the components from another class

I am very new to java.

I have a class where i am creating gui and another class (main class), i am accessing the gui class. In the gui class i am creating some components and returning them.

gui class,

        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; 
            }
        }

main class,

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

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

upto this its working fine.

In the main class there is a JTextArea, Whenever i open a file, i have to display the country list in cbo1, the file contains the list of countries that has to be displayed,

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

How to pass the country values to cbo1

Thanks

like image 529
AGEM Avatar asked Jun 30 '26 01:06

AGEM


2 Answers

Well, i usually see a GUI class having the swing components as the class attributes. You made something like a 'util' class for your GUI, so you will have to hunt your JComboBox

I suggest you to go for a full featured class to represent you GUI, like:

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); 
    }
}

Also, add getters and setters ;-).

If you wanna keep your code your way, you can search the combobox by index:

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

Or, better, you can name your JComboBox and then search for it by name:

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

and then:

public Component findCbo1() {
    for (Component comp : this.getComponents()) {
        if(comp.getName() != null && comp.getName().equals("countryCombo")) {
            return comp;
        }
    }
    return null;
}
like image 165
Will Avatar answered Jul 02 '26 15:07

Will


Two ways to do it....

  • Make the cbo1 as, static...so you will have to declare it outside the method in Class scope...

    So it will be like this..

    for(String s: countries){ 
    
     Gui.cbo1.addItem(s);
    
    
     }
    
  • Or use Singleton principle to have the Gui class as Singleton, and then use Composition to get access to the JComboBox cbo1

like image 44
Kumar Vivek Mitra Avatar answered Jul 02 '26 15:07

Kumar Vivek Mitra



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!