永发信息网

JAVA JFrame Graphics绘画不显示问题

答案:2  悬赏:10  手机版
解决时间 2021-02-05 21:50
JAVA JFrame Graphics绘画不显示问题
最佳答案
因为你在JFrame外面绘制图形,会特别短暂。
因为系统会经常调用JFrame默认的paint方法或者repaint方法进行绘制。当你的JFrame的paint方法没有具体实现的时候,也就是空白,这个空白会覆盖掉之前绘制的图形
所以解决办法有2个
第一:用javax.swing.Timer类.定时更新JFrame外面绘制的图形,防止被JFrame的paint覆盖掉
第二:写一个JFrame的子类,重写JFrame的paint方法
个人强烈推荐第二种方法!
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class DemoPaint {

public static void main(String[] args) {
JFrame jf = new MyJFrame();
jf.setBounds(160, 250, 300, 350);
jf.setTitle("测试");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);

// 说明因为这里的Graphics对象,绘制的图像都是很短暂的,
// 因为JFrame会调用自己的paint repaint等方法,重新绘制
Graphics g = jf.getRootPane().getGraphics();
g.setColor(Color.RED);// 红色
g.fillRect(100, 100, 50, 50);
System.out.println("最开始初始化的时候执行绘制红色矩形");//偶尔会短暂看到

//为了让绘制的图形一直可视.可以使用Timer方法,每隔1000毫秒更新绘制一次.
Timer t = new Timer(1000, new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
Graphics g = jf.getRootPane().getGraphics();
g.setColor(Color.BLUE);// 蓝色
g.fillRect(100, 100, 50, 50);
System.out.println("方法一:Timer任务每隔1000毫秒 执行绘制蓝色矩形");
}
});
t.start();//开始执行Timer
}

}
//写一个JFrame的子类
class MyJFrame extends JFrame {
@Override
public void paint(Graphics g) {//系统自带的paint方法,自动调用
super.paint(g);
g.setColor(Color.WHITE);// 白色
g.fillRect(100, 100, 50, 50);
System.out.println("方法二:系统调用了paint方法 执行绘制了白色矩形");
}

}输出

最开始初始化的时候执行绘制红色矩形
方法二:系统调用了paint方法 执行绘制了白色矩形
方法一:Timer任务每隔1000毫秒 执行绘制蓝色矩形
方法二:系统调用了paint方法 执行绘制了白色矩形
方法一:Timer任务每隔1000毫秒 执行绘制蓝色矩形
方法一:Timer任务每隔1000毫秒 执行绘制蓝色矩形
方法一:Timer任务每隔1000毫秒 执行绘制蓝色矩形
白色和蓝色矩形位置不一样.
是因为 白色矩形是JFrame里面的位置 100,100(包含了左右边框)
           蓝色矩形是JFrame.getRootPane里面的位置100,100(去掉了左右边框)

全部回答
末尾加一句试试? JF.getRootPane().repaint();追问抱歉 不行
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
林肯大陆和a6哪个好
我初三四百米体育课测试一分二秒,那一千米能
换向阀的工作原理
龙珠的观看顺序
两个分式相除,把除式的分子和分母________后
世界杰出华商大会的第一届大会
怎么解决蓝牙耳机延迟
权志龙8.28演唱会黄牛票多少
高等数学 这个例子看不懂
How far is far, how high is high? We'
詹姆斯单场0中是哪一场
交行储蓄卡柜台升级的问题
理科生上黑大还是哈理工好一点?
我给小孩取名易铭沛,铭沛是什么意思?
颐和园需要逛多久呀?要自备食物吗?
推荐资讯
用晒干的野菊花熬水能洗头发吗
停车场(滨江花园西南)(停车场)地址在什么地方
为什么我在建行提供学校和学号而银行工作人员
50油缸用多大的气缸能代替
佳丽装饰部怎么去啊,我要去那办事
长安cs75保养灯怎么弄
成都市中心商场有没有储物柜
韩之尚精艺烫染地址有知道的么?有点事想过去
电子商务大赛的问题
怎样识别冰鲜鱼(咸水鱼)是否新鲜呢
氨水会和酸,碱反应吗
口珠的意思是什么啊?知道的请说下!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?