我的课程主要延伸JFrame
,课程Cell
延伸JComponent
。
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();
}
}
Class Cell:
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);
}
}
由于
答案 0 :(得分:2)
如果你将它们添加到底部,就在setVisbile(true)
之前它应该可以正常工作
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setTitle("");
setVisible(true);
重要的部分是pack()
你不应该设置框架的大小。而是打包它,以便它尊重所有首选的组件尺寸
经过测试,效果很好
答案 1 :(得分:2)
你得到了这个效果,因为你使用GridBagLayout
。
您可以在GridLayout
的帮助下修复此问题,例如添加下一个组件:
setLayout(new GridLayout(5,5,5,5));
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
cells[i][j] = new Cell();
add(cells[i][j]);
}
}
或按建议使用pack()
方法。