【问题标题】:Adding gridLayout onto a JLabel with FlowLayout already implemented将 gridLayout 添加到已实现 FlowLayout 的 JLabel
【发布时间】:2014-05-14 11:54:58
【问题描述】:

我需要在我的 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);

    }

【问题讨论】:

  • Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为强大的 GUI 组织组件,请改用布局管理器或 combinations of them,以及 white space 的布局填充和边框。

标签: java swing layout-manager grid-layout flowlayout


【解决方案1】:

您可以使用带有 GridBagLayout 的 JPanel 作为 contentPane,并在您的 contentPane 中放置另外 2 个 JPanel,一个带有 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
        }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多