我得到了扩展 JFrame
的 Main 类和扩展了 JComponent
的 Cell
类。
Cell
在它的 paintComponent()
中填充一个矩形(正方形,大小为 50,50)。
我正在尝试绘制 JFrame
25 个 Cell
实例。它们的大小应该是 50,50(与它们绘制的正方形相同),但由于某些原因,当程序启动时,它们都不可见。
但是,当我放大窗口时,黑色方 block 突然出现了。
为什么它们不显示在较小的 (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);
}
}
谢谢
最佳答案
如果你将这些添加到底部,就在 setVisbile(true)
之前,它应该可以工作
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setTitle("");
setVisible(true);
重要的部分是 pack()
您不应该设置框架的大小。而是打包它,以便它尊重组件的所有首选大小
测试成功
关于java - JComponents 未在 JFrame 上正确绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798259/