JFrame中心组件

时间:2015-07-03 06:58:15

标签: java swing jframe centering gridbaglayout

我想知道如何集中我的组件,我找到了gridBagLayout,但我找不到比它更大的方法:我的按钮太小了。

我的部分代码:

private void addMainButtons() {
        JPanel container = new JPanel() {
            private static final long serialVersionUID = -424395301619105440L;

            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                Dimension dim = this.getSize();
                DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                Date date = new Date();
                g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
                g.setColor(Color.BLACK);
                String s = format.format(date);
                g.drawString(s, (int) ((dim.getWidth() - s.length() - 80) / 2), 20);
            }
        };
        container.setBackground(new Color(109, 69, 60));

        JButton productsButton = new JButton("Produits");
        productsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cl.show(frame, pages[1]);
            }
        });
        productsButton.setAlignmentY(Component.CENTER_ALIGNMENT);
        productsButton.setAlignmentX(Component.CENTER_ALIGNMENT);

        // Creating grid
        container.setPreferredSize(new Dimension(400, 600));
        container.setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        container.add(productsButton, gbc);

        gbc.gridy = 1;
        gbc.gridwidth = 1;
        container.add(new JButton("Entrée"), gbc);

        gbc.gridx = 1;
        container.add(new JButton("Sortie"), gbc);

        mainPage.setLayout(new BorderLayout());
        mainPage.add(container, BorderLayout.CENTER);
        // End of main page
    }

GridBagLayout真的很难用,还有另一种方法来集中组件吗?我可以使用NestedLayouts但我不知道如何。

2 个答案:

答案 0 :(得分:1)

您可以使用weightx和/或weighty来影响组件占用的空间量,例如,如果我这样做

GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;

gbc.weightx = 1;
gbc.weighty = 1;

container.add(productsButton, gbc);

gbc.gridy = 1;
gbc.gridwidth = 1;
container.add(new JButton("Entrée"), gbc);

gbc.gridx = 1;
container.add(new JButton("Sortie"), gbc);

我可以生成这个......

Big Buttons

你可以使用两个容器,一个容器显示JLabel显示日期,另一个包含按钮,但我怀疑这是你真正想要的。

您可以使用ipadxipady将金额添加到首选大小的组件

GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;

gbc.ipadx = 40;
gbc.ipady = 40;

container.add(productsButton, gbc);

gbc.gridy = 1;
gbc.gridwidth = 1;
container.add(new JButton("Entrée"), gbc);

gbc.gridx = 1;
container.add(new JButton("Sortie"), gbc);

Not so big buttons

,当包含在现有约束中时,可以让您稍微“增长”按钮。

答案 1 :(得分:0)

尝试下面的代码来增加按钮的大小,同时将每个组件添加到gridbagconstraints。根据需要更改weightx / weighty的值。

gbc.weightx = 1.0;
gbc.weighty = 1.0;

要在组件之间留出更多空格,请在将每个组件添加到gridbagconstraints时使用下面的代码。

gbc.insets = new Insets(2, 2, 2, 2);

据我所知,您使用了正确的方法来集中组件。它也可以通过其他布局来完成,但可能有点困难。