JButtons没有出现在GridBagLayout中

时间:2016-02-09 19:01:44

标签: java swing jframe jbutton gridbaglayout

我正在尝试创建一个10 x 10网格的完美正方形JButtons,两者之间没有间距。我相信,为了实现这一点,我唯一的解决方案是GridBagLayout。但是,我坚持第一步 - 当我使用循环时,我无法让它们出现。这就是我所拥有的。

带main()函数的类:

public class PixelArtist {
    public static void main(String[] args) {
        try {
            PixelArtistGUI frame = new PixelArtistGUI();
            frame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

GUI处理程序类:

public class PixelArtistGUI extends JFrame {
    public PixelArtistGUI() {
        setTitle("PixelArtist");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);

        JPanel contentPane = new JPanel(new GridBagLayout());
        this.add(contentPane);
        contentPane.setSize(500, 500);
        GridBagConstraints c = new GridBagConstraints();

        JButton b;

        for (int j = 0; j < 10; j++) {
            for (int i = 0; i < 10; i++) {
                b = new JButton();
                c.gridx = i;
                c.gridy = j;
                contentPane.add(b,c);
            }
        }

    }
}

以上所有内容都打开了一个非常小的,看似空的JFrame,如下所示:

Buttons not appearing in JFrame

我做的最后一件事是添加了contentPane.setSize(500, 500);行,但这似乎没有任何区别。

我确信这很简单 - 提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

这应该显示一些东西(我测试了它)。检查我添加语句的行// <<<<<<

  • 将面板设置为内容窗格
  • 设置内容窗格的首选大小
  • 调用包以将框架调整为首选尺寸
  • 使用SwingUtilities.invokeLater显示框架以使用事件调度线程
import java.awt.*;
import javax.swing.*;

public class PixelArtistGUI extends JFrame {
    public PixelArtistGUI() {
        setTitle("PixelArtist");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);

        JPanel contentPane = new JPanel(new GridBagLayout());
        setContentPane(contentPane); // <<<<<
        contentPane.setPreferredSize(new Dimension(500, 500)); // <<<<<
        GridBagConstraints c = new GridBagConstraints();

        JButton b;

        for (int j = 0; j < 10; j++) {
            for (int i = 0; i < 10; i++) {
                b = new JButton();
                c.gridx = i;
                c.gridy = j;
                contentPane.add(b,c);
            }
        }
        pack(); // <<<
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() { // <<<
            @Override
            public void run() {
                try {
                    new PixelArtistGUI().setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

答案 1 :(得分:2)

你至少应该使用

public void add(Component comp,Object constraints)

即:

contentPane.add(b,c);

正如FredK所说,将contentPane添加到框架