使容器占用GridLayout中组件的相同空间

时间:2014-05-26 06:40:45

标签: java swing layout-manager grid-layout

在我的swing应用程序中,我必须创建一个用于输入用户输入的数字面板。所需数字可根据要求更改(例如,在一个地方,它包含数字1-90,在另一个地方,它包含1-36个数字)。 我的问题是,在两个位置,当按钮数量发生变化时(从36到90),面板底部和右侧的空间会发生变化。我该如何管理? 我发送的代码供参考。

public class TestNumberPanel extends JPanel {

    private static final long serialVersionUID = 1L;
    private JButton[] btns;
    private static int NUM_BTNS = 42;
    private int initialValue = 1;
    private int gridRows = 6;
    private int gridCols = 7;

    public JButton[] getNumBtns() {
        return btns;
    }

    public TestNumberPanel(final int btns) {
        NUM_BTNS = btns;
        if (NUM_BTNS == 42) {
            gridRows = 6;
            gridCols = 7;
        } else if (NUM_BTNS == 90) {
            gridRows = 10;
            gridCols = 9;
        } else if (NUM_BTNS == 36) {
            gridRows = 6;
            gridCols = 6;
        }
        initComponents();
    }

    private void initComponents() {
        btns = new JButton[NUM_BTNS];
        for (int i = 0; i < NUM_BTNS; i++) {
            btns[i] = new JButton();
            btns[i].setBorder(BorderFactory.createLineBorder(Color.BLUE, 2));
            btns[i].setText(String.valueOf(initialValue));
            add(btns[i]);
            initialValue++;
        }
        setPreferredSize(new java.awt.Dimension(500, 370));
        // setBackground(ScreenColor.COLOR_WHITE);
        setBorder(new EmptyBorder(0, 5, 5, 0));
        // GridLayout gridLayout = new GridLayout(gridRows, gridCols, 5, 5);
        // gridLayout.minimumLayoutSize(this);
        setLayout(new GridLayout(gridRows, gridCols, 5, 5));
        // setLayout(gridLayout);
    }

    @SuppressWarnings("serial")
    public static void main(String[] args) {
        new JFrame() {
            {
                try {
                    add(new TestNumberPanel(36));
                    pack();
                    setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        };
    }

}

任何有关此代码改进的建议也将不胜感激。 提前谢谢。

0 个答案:

没有答案