Java 将gridLayout添加到已实现FlowLayout的JLabel上

Java 将gridLayout添加到已实现FlowLayout的JLabel上,java,swing,layout-manager,grid-layout,flowlayout,Java,Swing,Layout Manager,Grid Layout,Flowlayout,我需要在GUI的按钮下添加一个带有边框工厂的网格布局!我尝试过许多不同的方法,但似乎都不管用。我已将当前代码放在下面 public abstract class TestVehicles extends Vehicle implements ActionListener { public static void main(String[] args) { JFrame carPark = new JFrame("Car Park"); carPark.

我需要在GUI的按钮下添加一个带有边框工厂的网格布局!我尝试过许多不同的方法,但似乎都不管用。我已将当前代码放在下面

public abstract class TestVehicles extends Vehicle implements ActionListener {

    public static void main(String[] args) {

        JFrame carPark = new JFrame("Car Park");
        carPark.setSize(750, 750);
        carPark.setResizable(false);
        carPark.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        placeComponets(carPark);
        carPark.setVisible(true);

    }

    public static void placeComponets(JFrame carPark) {

        carPark.setLayout(new FlowLayout());

        JLabel userLabel = new JLabel("");
        userLabel.setBounds(750, 750, 750, 750);
        carPark.add(userLabel);
        userLabel.setBackground(Color.LIGHT_GRAY);
        userLabel.setOpaque(true);
        userLabel.setHorizontalAlignment(SwingConstants.LEFT);
        userLabel.setVerticalAlignment(SwingConstants.TOP);

        JButton addCar = new JButton("Add Car");
        addCar.setBounds(10, 10, 100, 100);
        carPark.add(addCar);
        addCar.setVisible(true);

        ActionListener addCarButtonListener = new AddCarButtonListener();
        addCar.addActionListener(addCarButtonListener);
        addCar.setVisible(true);

        JButton addLorry = new JButton("Add Lorry");
        addLorry.setBounds(10, 10, 25, 25);
        carPark.add(addLorry);
        addLorry.setVisible(true);

        ActionListener addLorryButtonListener = new AddLorryButtonListener();
        addLorry.addActionListener(addLorryButtonListener);
        addLorry.setVisible(true);

        JButton addCoach = new JButton("Add Coach");
        addCoach.setBounds(10, 10, 100, 100);
        carPark.add(addCoach);
        addCoach.setVisible(true);

        ActionListener addCoachButtonListener = new AddCoachButtonListener();
        addCoach.addActionListener(addCoachButtonListener);
        addCoach.setVisible(true);


        JPanel gridPanel = new JPanel();
        JPanel gridPanelLayout = new JPanel(new GridLayout(4, 5, 10, 10));
        carPark.add(gridPanelLayout);
        gridPanelLayout.setBackground(Color.WHITE);

        gridPanelLayout.setBorder(BorderFactory.createEmptyBorder(4, 4, 10, 10));
        Border redBorder = BorderFactory.createLineBorder(Color.RED);

    }

您可以将一个带有GridBagLayout的JPanel用作contentPane,并将另外两个JPanel放在contentPane中,一个带有FlowLayout,另一个带有GridLayout

 public class Test implements ActionListener {
    protected static JPanel panel;
    protected static JPanel panel_1;
        public static void main(String[] args) {
            JFrame carPark = new JFrame("Car Park");
            carPark.setSize(750, 750);
            carPark.setResizable(false);
            carPark.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            GridBagLayout gridBagLayout = new GridBagLayout();
            gridBagLayout.columnWidths = new int[]{0, 0};
            gridBagLayout.rowHeights = new int[]{0, 0, 0};
            gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
            gridBagLayout.rowWeights = new double[]{1.0, 1.0, Double.MIN_VALUE};
            carPark.getContentPane().setLayout(gridBagLayout);

            panel = new JPanel();
            GridBagConstraints gbc_panel = new GridBagConstraints();
            gbc_panel.insets = new Insets(0, 0, 5, 0);
            gbc_panel.fill = GridBagConstraints.BOTH;
            gbc_panel.gridx = 0;
            gbc_panel.gridy = 0;
            carPark.getContentPane().add(panel, gbc_panel);
            panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

            panel_1 = new JPanel();
            GridBagConstraints gbc_panel_1 = new GridBagConstraints();
            gbc_panel_1.fill = GridBagConstraints.BOTH;
            gbc_panel_1.gridx = 0;
            gbc_panel_1.gridy = 1;
            carPark.getContentPane().add(panel_1, gbc_panel_1);
            panel_1.setLayout(new GridLayout(1, 0, 0, 0));
            carPark.setVisible(true);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
        }

}

javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请改为使用布局管理器,或者与布局填充和边框一起使用。