简体   繁体   中英

How to update Jpanel using JComboBox

i'm new in java language, and i'm trying to create a GUI which it has JComboBox to allow the user to select one of the choices and based on the selected option the panel is updated by adding more text fields. currently i'm facing an issue which is the panel doesn't updated if I choosed (choice 1) it should appear 5 text fields with their labels.

My question is: how can I update the panel to add more text fields based on the selected option from JComboBox by the user?

Also, I'm facing another issue which i couldn't find a way to setting the size of JFrame

Here is my code:

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class RTSS extends JFrame implements ActionListener {

private JComboBox cb;
JPanel main;
JPanel panel3;
JPanel panel2;
JPanel panel1;
GridBagConstraints gbc;
String[] choices;
JLabel Label1;
JLabel Label2;
JLabel Label3;
JLabel Label4;
JLabel Label5;
JTextField tf1;
JTextField tf2;
JTextField tf3;
JTextField tf4;
JTextField tf5;



public RTSS() {
    Border blackline = BorderFactory.createLineBorder(Color.black);
    EmptyBorder b1 = new EmptyBorder(5, 0, 0, 0);
    main = new JPanel(new FlowLayout(FlowLayout.LEFT));

    panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    panel3.setAlignmentX(1);
    panel3.setPreferredSize(new Dimension(800, 35));
    panel3.setBorder(b1);
    main.add(panel3);

    panel2 = new JPanel();
    panel1 = new JPanel();
    panel1.setPreferredSize(new Dimension(700, 500));
    panel1.setBorder(blackline);
    panel1.setLayout(new GridBagLayout());
    gbc = new GridBagConstraints();
    choices = new String[]{ "","Choice 1", "Choice 2", "Choice 3 "};
    cb = new JComboBox(choices);

    //Main inputs (labels)
    Label1 = new JLabel("Label 1 ");
    Label2 = new JLabel("Label 2 ");
    Label3 = new JLabel("Label 3");
    Label4 = new JLabel("Label 4 ");
    Label5 = new JLabel("Label 5 ");

    //TextFields
    tf1 = new JTextField(10);
    tf2 = new JTextField(10);
    tf3 = new JTextField(10);
    tf4 = new JTextField(10);
    tf5 = new JTextField(10);
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.weightx = 0;
    gbc.weighty = 0;
    gbc.insets = new Insets(10, 3, 5, 0);
    panel3.add(cb);
    panel2.add(panel1);
    gbc.gridx = 0;
    gbc.gridy = 0;
    panel1.add(Label1, gbc);
    gbc.gridx = 0;
    gbc.gridy = 1;
    panel1.add(Label2, gbc);
    gbc.gridx = 0;
    gbc.gridy = 2;
    panel1.add(Label3, gbc);
    gbc.gridx = 1;
    gbc.gridy = 0;
    panel1.add(tf1, gbc);
    gbc.gridx = 1;
    gbc.gridy = 1;
    panel1.add(tf2, gbc);
    gbc.weightx = 0.5;
    gbc.weighty = 0.5;
    gbc.gridx = 1;
    gbc.gridy = 2;
    panel1.add(tf3, gbc);
    main.add(panel2);
    add(main);


}
@Override
public void actionPerformed(ActionEvent e) {
    String Choice = cb.getSelectedItem().toString();
    if ("Choice 1".equals(Choice)) {
        gbc.gridx = 0;
        gbc.gridy = 3;
        panel1.add(Label4, gbc);
        gbc.gridx = 1;
        gbc.gridy = 3;
        panel1.add(tf4, gbc);
        gbc.gridx = 0;
        gbc.gridy = 4;
        panel1.add(Label5, gbc);
        gbc.weightx = 6;
        gbc.weighty = 1;
        gbc.gridx = 1;
        gbc.gridy = 4;
        panel1.add(tf5, gbc);
    }
}

public static void main(String[] args) {

    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new RTSS().setVisible(true);
        }
    });
}
}

Add the following lines to the end of the RTSS constructor:

public RTSS() {
    //your code

    //this lines 
    pack();        
    setLocationRelativeTo(null);
    cb.addActionListener(this);
}

These 3 lines will 1.set the layout, 2. center the frame and 3. activate the ActionListener. If you now make a selection in the ComboBox, your code will be executed in the ActionListener.

After a selection in the ComboBox that changes the layout, call pack() again.

@Override
public void actionPerformed(ActionEvent e) {
    String Choice = cb.getSelectedItem().toString();
    if ("Choice 1".equals(Choice)) {
         // your code

        pack();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM