【发布时间】:2013-12-27 09:38:22
【问题描述】:
我有扩展 JFrame 的 Main 类和扩展 JComponent 的 Cell 类。
Cell 在paintComponent() 中填充一个矩形(正方形,大小为 50,50)。
我正在尝试利用 JFrame 25 Cell 实例。它们的大小应该是 50,50(与它们绘制的正方形相同),但由于某种原因,当程序启动时,它们都不可见。
但是,当我放大窗口时,突然出现应有的黑色方块。
为什么它们也不显示在较小的 (250,250) 窗口中(程序启动时启动的窗口)?
代码如下:
主类:
import javax.swing.*;
import java.awt.*;
import java.awt.Event.*;
public class Main extends JFrame
{
Cell[][] cells = new Cell[5][5];
public Main(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(250,250);
setTitle("");
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(5,5,5,5);
for(int i=0;i<5;i++){
gbc.gridy = i+1;
gbc.gridx = 1;
for(int j=0;j<5;j++){
gbc.gridx = j+1;
cells[i][j] = new Cell();
add(cells[i][j], gbc);
}
}
setVisible(true);
}
public static void main(String[] args)
{
Main m = new Main();
}
}
类单元:
import javax.swing.*;
import java.awt.*;
import java.awt.Event.*;
public class Cell extends JComponent
{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.fillRect(1, 1, 50, 50);
}
public Dimension getPreferredSize(){
return new Dimension(50,50);
}
}
谢谢
【问题讨论】:
-
别忘了
pack();另见Initial Threads。 -
谢谢,它有效。但是为什么方块没有像我以前那样显示出来呢?为什么 pack() 解决了这个问题?
-
API 解决了这个问题。
-
@josh 之所以有效,是因为 pack 使用内容窗格的首选大小来计算框架的最佳大小,这就是您应该使用它的原因
标签: java swing paintcomponent gridbaglayout