我正在尝试创建一个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,如下所示:
我做的最后一件事是添加了contentPane.setSize(500, 500);
行,但这似乎没有任何区别。
我确信这很简单 - 提前感谢您的帮助。
答案 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添加到框架