Swing Layout with CardLayout

41 Views Asked by At

enter image description here

How can I have get the layout in picture ? Current issue I am facing is that I am able see the dropdown 1 and text box but I do not see the dropdown 2 and text box aligned to it displayed.

private final JComboBox firstComboBox;
private final JComboBox secondComboBox;

private final JTextField textField;
private final JTextField textField2;
    
private final JPanel cards = new JPanel(new CardLayout());

private final JPanel first = new JPanel();
private final JPanel second = new JPanel();

public Layout() {
   super(BoxLayout.X_AXIS);

   Vector<Enum> v = new Vector<Enum>();
   firstComboBox = new JComboBox(v);
   secondComboBox = new JComboBox(v);

   first.add(firstComboBox);
   second.add(secondComboBox);

   textField = new JTextField(50);
   textField.setDocument(new JTextFieldLimit(50));

   cards.add(first);
   cards.add(second);

   add(cards);

   first.add(textField, "NORMAL");
   first.add(new JPanel(), "EXISTS");

   textField2 = new JTextField(50);
   textField2.setDocument(new JTextFieldLimit(50));

   second.add(textField2, "NORMAL");
   second.add(new JPanel(), "EXISTS");
}

1

There are 1 best solutions below

0
Gilbert Le Blanc On BEST ANSWER

I copied your code into my IDE. The code was so confusing to me that I cleared the screen and started from scratch.

Here's the GUI I came up with, based on your drawing.

Example

I used a GridBagLayout as I suggested in my comments.

Here's the complete, no changes needed, absolutely runnable code.

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class GridBagLayoutTest3 implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new GridBagLayoutTest3());
    }

    @Override
    public void run() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createMainPanel(), BorderLayout.CENTER);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public JPanel createMainPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.LINE_START;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(0, 5, 5, 5);

        gbc.gridwidth = 2;
        gbc.gridx = 0;
        gbc.gridy = 0;
        JLabel label = new JLabel("Title");
        label.setFont(panel.getFont().deriveFont(Font.BOLD, 36f));
        label.setHorizontalAlignment(JLabel.CENTER);
        panel.add(label, gbc);

        gbc.gridwidth = 1;
        gbc.gridy++;
        String[] greek = { "alpha", "beta", "gamma" };
        JComboBox<String> greekComboBox = new JComboBox<>(greek);
        panel.add(greekComboBox, gbc);

        gbc.gridx++;
        JTextField textField1 = new JTextField(40);
        panel.add(textField1, gbc);

        gbc.gridx = 0;
        gbc.gridy++;
        String[] ordinals = { "first", "second", "third" };
        JComboBox<String> ordinalsComboBox = new JComboBox<>(ordinals);
        panel.add(ordinalsComboBox, gbc);

        gbc.gridx++;
        JTextField textField2 = new JTextField(40);
        panel.add(textField2, gbc);

        return panel;
    }

}