在过去的两天里,我试图了解

Java如何处理图形,但是在这方面却失败了.我的主要问题是如何以及何时应该调用paint()(或更新的paintComponent()).

在下面的代码中我看到了什么时候创建的东西,paintComponent()永远不会被调用,除非我自己手动添加一个调用或者调用JFrame.paintAll()/ JFrame.paintComponents().

我将paint()方法重命名为paintComponent(),希望能解决我永远不会被调用的问题(即使在repaint()),但没有运气.

package jpanelpaint;

import java.awt.*;

import javax.imageio.*;

import javax.swing.*;

import java.io.*;

import java.util.ArrayList;

public class ImageLoadTest extends JComponent {

ArrayList list;

public ImageLoadTest() {

list = new ArrayList();

try { //create the images (a deck of 4 cards)

for(String name : createImageFileNames(4)){

System.err.println(name);

list.add(ImageIO.read(new File(name)));

}

} catch (IOException e) { }

}

protected void paintComponent(Graphics g) {

int yOffset=0;

System.err.println("ImageLoadTest.paintComponent()");

for(Image img : list) {

g.drawImage(img, 0, yOffset, null);

yOffset+=20;

}

}

public static void main(String args[]) throws InterruptedException {

JFrame frame = new JFrame("Empty JFrame");

frame.setSize(new Dimension(1000, 500));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

Thread.sleep(1000);

frame.setTitle("Loading images");

ImageLoadTest ilt = new ImageLoadTest();

frame.add(ilt);

//update the screen

//DOESN'T WORK. only works if I call frame.paintAll(frame.getGraphics())

ilt.repaint();

frame.repaint();

Thread.sleep(1000);

frame.setTitle("Setting background");

ilt.setBackground(Color.BLACK);

//update the screen - DOESN'T WORK even if I call paintAll ..

ilt.repaint();

frame.repaint();

//have to call one of these to get anything to display

// ilt.paintComponent(frame.getGraphics()); //works

frame.paintComponents(frame.getGraphics()); //works

}

//PRIVATE HELPER FUNCTIONS

private String[] createImageFileNames(int count){

String[] fileNames = new String[count];

for(int i=0; i < count; i++)

fileNames[i] = "Cards" + File.separator + (i+1) + ".bmp";

return fileNames;

}

}

paint java_java – 为什么paint()/ paintComponent()从未被调用?相关推荐

  1. android中绘图Paint.setAntiAlias()和Paint.setDither()方法的作用

    转载:http://blog.csdn.net/lovexieyuan520/article/details/50732023 在自定义View中,这两个Paint.setAntiAlias()和Pa ...

  2. 要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列

    要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列 ...

  3. android paint 线宽_android Paint 设置线宽setStrokeWidth()的单位

    首先画一个空心的矩形框,代码如下: public class MainActivity extends Activity { @Override public void onCreate(Bundle ...

  4. java paint方法调用_Java paint()方法个人理解

    这些天给同学讲了不少次JUI的 paint()方法和画笔,就目前而言已经比当初自己写的时候理解的多了不少了,虽然有点花时间,但好处还是有的.(习惯把Graphics g对象叫做画笔) 以前想要在某个容 ...

  5. Java | 图形界面中paint,repaint,paintcomponent等函数的理解

    事件派发线程::事件派发线程是用于swing组件的.当你在main函数里创建一个窗口类的子类像JFrame,就自动创建了一个事件派发线程,如果你在 窗口里按下一个按钮或操作其它控件,就会产生事件,如果 ...

  6. 关于Java中的paint,repaint,update三个方法的关系

    几个星期前做了一个坦克大战,里面用到了这三个方法:repaint,update,paint,并且调用的顺序也是那样,当时没想太多,默认接受了,但是昨天看  Applet 时,它有一个绘图周期,里面就包 ...

  7. 图像化界面paint,repaint方法的总结

    JAVA 画图中出现的paint()函数 问题:刚学JAVA,有一个问题.以下是一段JAVA代码,它弹出了一个窗口,并在窗口上使用paint()画出矩形.椭圆.扇面等图形.现在我想让画图行为受用户控制 ...

  8. Android 中一些常用类的常用方法(Math、Random、Color、Paint、Canvas、Bitmap、BitmapFactory)...

    1.java.lang.Math类常用的常量和方法: Math.PI 记录的圆周率 Math.E 记录e的常量 Math.abs 求绝对值 Math.sin 正弦函数 Math.asin 反正弦函数 ...

  9. 详解Paint的setPathEffect(PathEffect effect)

    一.setPathEffect() 这个方法一看就和path有关,顾名思义,它就是给path设置样式(效果)的.PathEffect这个路径效果类没有具体的实现,效果是由它的六个子类实现的: 这六个子 ...

  10. 自定义控件详解(六):Paint 画笔MaskFilter过滤

    首先看一个API:setMaskFilter(MaskFilter maskfilter): 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等. 以下有两个Ma ...

最新文章

  1. php播放音乐视频,html5停止(暂停)当前播放的音频或视频的方法pause()
  2. LeetCode 200. Number of Islands--c++ dfs解法
  3. ID--HANDLE--HWND三者之间的互相转换
  4. Flink从入门到精通100篇(十二)-如何分析和定位 Flink 作业 OOM 问题?
  5. PHP面试题:你所知道的php数组相关的函数?
  6. 微软Skype Translator将支持阿拉伯语即时语音翻译
  7. 立体视觉–stereo correspondence(双目立体匹配)
  8. ctfshow-萌新-web11( 利用命令执行漏洞获取网站敏感文件)
  9. Android ViewPager 重复数据问题的解决方法
  10. Ext.data-DataProxy/ HttpProxy/ MemoryProxy/ ScriptTagProxy
  11. router阻止telnet自身的两种方法
  12. resize view from nib引起的子控制器视图(childviewcontroller)部分区域无响应
  13. 例4.5 最小公倍数 - 九度教程第48题(最小公倍数)
  14. 一连三问 !!! 什么是内存对齐?内存对齐的原因是什么?内存对齐的好处是什么?
  15. the7主题footer.php,the7主题的安装和数据导入
  16. 【Unity3D】报错 Some objects were not cleaned up when closing the scene.
  17. IDEA如何创建XML文件并用浏览器打开
  18. java处理解析xml文件的几种方法及每种方法的区别
  19. [模块]EC11旋转编码器
  20. yolov5增加一层小目标检测层

热门文章

  1. 从零开始一起学习SLAM | 相机成像模型
  2. 第二十三篇 玩转数据结构——栈(Stack)
  3. POJ 2728 Desert King:最优比率生成树
  4. hdu 1059 (多重背包) Dividing
  5. Rational Rose 2003 逆向工程转换C++ / VC++ 6.0源代码成UML类图
  6. [JAVA]使用Jersey处理Http协议中的Multipart
  7. 我国三大常用坐标系区别(北京54、西安80和WGS-84)
  8. 51单片机汇编_1_内外存储器转移数据
  9. MSRA,我的实习初体验(上)
  10. AI顶会论文“趋势”:对新方法的过度关注,与现实问题的脱节