Search code examples
javajcombobox

How to get the value from 2nd SubComboBox?


I'm new here, I need help about the codes in Java. And asking question here is my last option, and there you go. I already squeezed every last bit in my brain. I didn't get the output that I want. This code was posted here in stackoverflow. And this code was just the same thing that I want to create.

I just want to get the value of the 2nd JComboBox.

For example:

I clicked "Shape" in first ComboBox. Then I choose "Triangle". Then the last part was I'll put some or it will show the description about that "Triangle". Like "Triangle has three sides." something like that.

Another example

I chose "Color" in the first ComboBox. Then I clicked the "Red". Then I want to show the description of the color "Red" on the last part of the output.

Example of the output after choosing in JComboBox is:

"Shape: Triangle

Triangle has three sides."

I hope it makes sense.

Here's the sample code..

    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;

  public class ComboBoxTwo extends JFrame implements ActionListener,   ItemListener {

private static final long serialVersionUID = 1L;
private JComboBox mainComboBox;
private JComboBox subComboBox;
private Hashtable<Object, Object> subItems = new Hashtable<Object, Object> ();

public ComboBoxTwo() {
    String[] items = {"Select Item", "Color", "Shape", "Fruit"};
    mainComboBox = new JComboBox(items);
    mainComboBox.addActionListener(this);
    mainComboBox.addItemListener(this);

    getContentPane().add(mainComboBox, BorderLayout.WEST);
    subComboBox = new JComboBox();

    subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4
    subComboBox.addItemListener(this);
    getContentPane().add(subComboBox, BorderLayout.EAST);
    String[] subItems1 = {"Select Color", "Red", "Blue", "Green"};
    subItems.put(items[1], subItems1);
    String[] subItems2 = {"Select Shape", "Circle", "Square", "Triangle"};
    subItems.put(items[2], subItems2);
    String[] subItems3 = {"Select Fruit", "Apple", "Orange", "Banana"};
    subItems.put(items[3], subItems3);

}

@Override
public void actionPerformed(ActionEvent e) {
    String item = (String) mainComboBox.getSelectedItem();
    Object o = subItems.get(item);
    if (o == null) {
        subComboBox.setModel(new DefaultComboBoxModel());
    } else {
        subComboBox.setModel(new DefaultComboBoxModel((String[]) o));
    }
}

@Override
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        if (e.getSource() == mainComboBox) {
            if (mainComboBox.getSelectedIndex() != 0) {
                FirstDialog firstDialog = new FirstDialog(ComboBoxTwo.this,
                        mainComboBox.getSelectedItem().toString(), "Please wait,  Searching for ..... ");
            }
        } 
    }
}

private class FirstDialog extends JDialog {

    private static final long serialVersionUID = 1L;

    FirstDialog(final Frame parent, String winTitle, String msgString) {
        super(parent, winTitle);
        setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        JLabel myLabel = new JLabel(msgString);
        JButton bNext = new JButton("Stop Processes");
        add(myLabel, BorderLayout.CENTER);
        add(bNext, BorderLayout.SOUTH);
        bNext.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent evt) {
                setVisible(false);
            }
        });
        javax.swing.Timer t = new javax.swing.Timer(1000, new      
ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
            }
        });
        t.setRepeats(false);
        t.start();
        setLocationRelativeTo(parent);
        setSize(new Dimension(400, 100));
        setVisible(true);
    }
}

public static void main(String[] args) {
    JFrame frame = new ComboBoxTwo();
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}
} ///////

Solution

  • This works

    package test1;
    
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    
    import javax.swing.*;
    
    public class ComboBoxTwo extends JFrame implements ActionListener, ItemListener {
    
        private static final long serialVersionUID = 1L;
        private JComboBox<String> mainComboBox;
        private JComboBox<String> subComboBox;
    
        private JLabel label;
        private String[][] descriptions;
    
        private Hashtable<Object, Object> subItems = new Hashtable<Object, Object> ();
    
        public ComboBoxTwo() {
            String[] items = {"Select Item", "Color", "Shape", "Fruit"};
            this.getContentPane().setLayout(null);
    
            this.setSize(400, 400);
    
            mainComboBox = new JComboBox<String>(items);
            mainComboBox.addActionListener(this);
            mainComboBox.addItemListener(this);
            mainComboBox.setSize(100, 100);
            mainComboBox.setLocation(0, 100);
    
    
            subComboBox = new JComboBox<String>();  
            subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4
            subComboBox.addItemListener(this);
            subComboBox.setSize(100, 100);
            subComboBox.setLocation(this.getSize().width - 120, 100);
    
    
            String[] subItems1 = {"Select Color", "Red", "Blue", "Green"};
            subItems.put(items[1], subItems1);
    
            String[] subItems2 = {"Select Shape", "Circle", "Square", "Triangle"};
            subItems.put(items[2], subItems2);
    
            String[] subItems3 = {"Select Fruit", "Apple", "Orange", "Banana"};
            subItems.put(items[3], subItems3);
    
    
            label = new JLabel();
            label.setSize(300, 25);
            label.setLocation(this.getSize().width /2 - label.getSize().width /2, 25);
            label.setText("This is a label: currently nothing selected");
            label.setVisible(true);
    
    
            getContentPane().add(subComboBox);
            getContentPane().add(mainComboBox);
            getContentPane().add(label);
    
            descriptions = new String[][]
            { 
                {"The red color", "The blue color", "A green color"}, 
                {"This shape is round", "Looks rectangular", "Has three sides"}, 
                {"Didn't fall far from the tree", "Seems quite orangy", "Look i've got a banana in my trousers"} 
            };    
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            String item = (String) mainComboBox.getSelectedItem();
            Object o = subItems.get(item);
            if (o == null) {
                subComboBox.setModel(new DefaultComboBoxModel<String>());
            } else {
                subComboBox.setModel(new DefaultComboBoxModel<String>((String[]) o));
            }
        }
    
        @SuppressWarnings("unchecked")
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
    
                if (mainComboBox.getSelectedIndex() == 0 && subComboBox.getSelectedIndex() == 0)
                {
                    label.setText("This is a label: currently nothing selected");
                }
                else if (mainComboBox.getSelectedIndex() >= 0)
                {
                    label.setText("The first combobox has been altered");
                }
    
                if (e.getSource() == mainComboBox) {
                    if (mainComboBox.getSelectedIndex() != 0) {
                        FirstDialog firstDialog = new FirstDialog(ComboBoxTwo.this,
                                mainComboBox.getSelectedItem().toString(), "Please wait,  Searching for ..... ");
                    }
                }
                else if (e.getSource() == subComboBox)
                {
                    label.setText(descriptions[mainComboBox.getSelectedIndex() -1][((JComboBox<String>) e.getSource()).getSelectedIndex() -1]);
                }
            }
        }
    
        private class FirstDialog extends JDialog {
    
            private static final long serialVersionUID = 1L;
    
            FirstDialog(final Frame parent, String winTitle, String msgString) {
                super(parent, winTitle);
                setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
                JLabel myLabel = new JLabel(msgString);
                JButton bNext = new JButton("Stop Processes");
                add(myLabel, BorderLayout.CENTER);
                add(bNext, BorderLayout.SOUTH);
                bNext.addActionListener(new ActionListener() {
    
                    @Override
                    public void actionPerformed(ActionEvent evt) {
                        setVisible(false);
                    }
                });
                javax.swing.Timer t = new javax.swing.Timer(1000, new  ActionListener() {
    
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        setVisible(false);
                    }
                });
                t.setRepeats(false);
                t.start();
                setLocationRelativeTo(parent);
                setSize(new Dimension(400, 100));
                setVisible(true);
            }
        }
    
        public static void main(String[] args) {
            JFrame frame = new ComboBoxTwo();
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    }