JPanel repaint()方法问题

时间:2017-01-04 23:30:26

标签: java swing graphics

我正在使用JPanel和JFrame类在窗口中创建简单的图形,并且发现了一个相当奇怪的问题。我目前的设置如下:

import javax.swing.JFrame;

public class MyFrame extends JFrame{

    public MyFrame() {
        super("App Schmapp!");
        this.setSize(new java.awt.Dimension(500, 500));
        this.setMinimumSize(this.getSize());
        this.setMaximumSize(this.getSize());
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        MyPanel c = new MyPanel();
        MyFrame a = new MyFrame();
        a.add(c);
        c.repaint();

    }

}

上面显然是我的JFrame类,下面是我的JPanel类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;

public class MyPanel extends JPanel {

    public void paintComponent(Graphics G) {
        super.paintComponent(G);
        Graphics2D g = (Graphics2D) G;
        g.setColor(Color.RED);
        g.fillRect(50, 50, 50, 50);
    }

}

我希望这会有效,但是当我运行此代码时会弹出一个没有图形的空白窗口。我不明白的部分是,如果我将JFrame的尺寸改为7000×10000,它可以正常工作......请帮助吗?

1 个答案:

答案 0 :(得分:0)

c.repaint();替换为:

a.pack();
a.setVisible(true);

它应该显示红色方块。