1

我必须使用网格包布局在 JFrame 中设计按钮。以便所有系统的定位可能相同。我正在使用以下代码,但我想对按钮进行分组。
我想设计按钮,以便可以创建三组,每组 4 个按钮。

   import java.awt.GridLayout;

   import javax.swing.JButton;
   import javax.swing.JFrame;

   public class GridLayoutTest {

   public static void main(String[] args) {
   JFrame.setDefaultLookAndFeelDecorated(true);
   JFrame frame = new JFrame("GridLayout Test");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setLayout(new GridLayout(3, 2));
   frame.add(new JButton("Button 1"));
   frame.add(new JButton("Button 2"));
   frame.add(new JButton("Button 3"));
   frame.add(new JButton("Button 4"));
   frame.add(new JButton("Button 5"));
   frame.add(new JButton("Button 6"));
   frame.add(new JButton("Button 7"));
   frame.add(new JButton("Button 8"));
   frame.pack();
   frame.setVisible(true);
   }
  }
4

1 回答 1

5

所以,像...

在此处输入图像描述

public class BadLayout04 {

    public static void main(String[] args) {
        new BadLayout04();
    }

    public BadLayout04() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new ButtonsPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ButtonsPane extends JPanel {

        public ButtonsPane() {

            JPanel group1 = createGroup(1);
            JPanel group2 = createGroup(5);
            JPanel group3 = createGroup(9);

            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            add(group1, gbc);
            gbc.gridx = 1;
            add(group2, gbc);
            gbc.gridx = 0;
            gbc.gridy++;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            add(group3, gbc);

        }

        public JPanel createGroup(int index) {

            JPanel group = new JPanel(new GridBagLayout());
            group.setBorder(new EmptyBorder(4, 4, 4, 4));
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.fill = GridBagConstraints.BOTH;
            for (int loop = 0; loop < 4; loop++) {
                group.add(new JButton("Button " + (index++)), gbc);
            }

            return group;

        }

    }

}
于 2012-11-20T05:14:08.183 回答