java - JComponents 未在 JFrame 上正确绘制

标签 java swing paintcomponent gridbaglayout

我得到了扩展 JFrame 的 Main 类和扩展了 JComponentCell 类。 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/

相关文章:

java - 设置 JButton 大小

java - Tomcat Websocket 发送消息后关闭连接(CLOSED_ABNORMALLY)

java - Word Wrapping 在 JTextArea 中不起作用

java - 在 JTextArea 中显示图像

Java JFrame 绘制多行

java - Spring-JPA-data保存实体UNIQUE INDEX(两列,不是pk)违反不能抛出异常

java - 如何停止 getNodeName() 并同时打印节点类型

java - 在 JPanel 上绘图而不重新绘制背景

Java - PaintComponent 不会在 JPanel 上显示绘图

java - 如果在 JPanel 上画得太远,我怎样才能再次画一个圆