java画矩形框 内部是空的_java – 在JFrame中绘制矩形不起作用

本文讨论了在Java中使用JFrame绘制矩形时遇到的问题,即矩形内部显示为空。问题源于没有正确覆盖paint()方法。解决方案包括扩展JFrame并在其中覆盖paint方法,或者创建一个JPanel并重写其paintComponent方法。建议采用覆盖paintComponent方法的方案以保持良好的面向对象设计。
摘要由CSDN通过智能技术生成

我相信你要做的是调用frame.repaint();代替.但是这仍然不能解决你的问题,因为你的paint()方法实际上并没有覆盖JFrame的paint()方法,因为你的类没有扩展JFrame,它只是在构造函数中创建一个JFrame.

所以,你可以做最后一分钟覆盖并将你的绘画方法移动到那里(根据polypiel的答案),或者(我个人认为更有说服力)你可以让你的类扩展JFrame,就像这样;

import javax.swing.*;

import java.awt.*;

public class Infout extends JFrame{

Infout(){

setSize(300, 400);

setTitle("An Empty Frame");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);

}

public static void main(String[] args) {

Infout m = new Infout();

m.repaint();

}

@Override

public void paint(Graphics g)

{

g.drawRect(5, 5, 105, 105);

}

}

正如其他人已经指出的那样,paintComponent()是一个更好的覆盖选择,你应该记得在新的重写方法的开头对super()进行适当的调用.然后,您必须创建一个新的JPanel以放入JFrame,因为JFrame没有要覆盖的paintComponent()方法.

为此,您可以完全从类中删除paint()方法,并将以下最后一分钟覆盖添加到构造函数中:

setLayout(new BorderLayout());

add(new JPanel(){

@Override

public void paintComponent(Graphics g){

super.paintComponent(g);

g.drawRect(5, 5, 105, 105);

}

}, BorderLayout.CENTER);

但是,对于可扩展性和良好的面向对象设计,从长远来看,定义自己的JPanel子类并覆盖那里的paintComponent(Graphics)方法可能会更好.抱歉胡扯,我希望这会有所帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值