paintjava的简单介绍

博主:adminadmin 2022-12-10 09:45:09 79

本篇文章给大家谈谈paintjava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

关于java中画图形的paint方法

代码如下:

/**分析下例:我们只是new了一个对象并没有调用Paint()方法那为什么会画出图呢?

* Graphics这个类的对象就是一只画笔,当某容器调用paint()时就会在该容器中画图。

* 当窗口产生时本身就存在一只画笔,我们只需要拿到画笔重写Paint()便可以随心作画。

*每次需要重画的时候就会自动调用paint(Graphics g)(什么时候需要重画呢?如当窗口被覆盖又重新置顶时,当窗口最小化又最大化时等等)

*/

总结:我们想要在容器中画图时只需要做的就是:  在该容器中重写Paint() 系统会自动传给我们画笔,自动调用paint方法按照我们的意愿进行作画。

public class TestGraphics extends Frame. {

public static void main(String []args) {

new TestGraphics("画图",100,100,200,200,Color.white);

}

public TestGraphics(String s,int x,int y,int w,int h,Color c) {

super(s);

this.setBounds(x, y, w, h);

this.setBackground(c);

this.setVisible(true);

}

public void paint(Graphics g) {

Color c = g.getColor();

g.setColor(Color.magenta);

g.fillOval(100, 100, 50, 50);

g.setColor(Color.green);

g.fill3DRect(60, 100, 50, 50, false);

g.setColor(c);

}

}

小例子2:

import java.awt.*;

import java.awt.event.*;

import java.util.*;

/**

原理是:在Frame中增加成员变量-容器ArrayList,用它来容纳点,每次点击鼠标就触发了事件:往容器中添加一个点,然后立即调用repaint方法强制画出容器中所有的点来

所以我们利用容器来"装"点,然后通过iterator来遍历画出所有的点。

适配器类:使用适配器类可以只重写我们需要的方法

因为这些适配器类都已经实现了相应的接口即把所有的方法都空实现了一遍 我们只需要重写我们需要的方法即可

repaint -调用- update() - 调用 - paint();

*/

public class MyFrame. extends Frame. {

ArrayListPointal ;//泛型指定容器中只能放入Point

public MyFrame(String s) {

super(s);

al =new ArrayListPoint();

this.setBounds(100, 100, 200, 200);

this.setBackground(Color.darkGray);

this.setVisible(true);

this.addMouseListener(new MouseAdapter(){//匿名类

@Override

public void mousePressed(MouseEvent e) {

MyFrame. f = (MyFrame)e.getSource();//e是事件,e.getSource()是获取事件源即窗口 f

f.al.add(new Point(e.getX(),e.getY())); //而e.getX(),e.getY()则是获取事件发生的x,y坐标

repaint();//每次点击鼠标触发事件时都有了新的点,所以强制要求重画,才能立刻显示出该点否则只有窗口被最小化又最大化后才能看到刚才的点

}

});

//匿名类:在参数处我们传递的是new WindowAdapter()  {匿名类体} );他没有名字,我们把它当成WindowAdapter来用,为什么可以这样呢?因为语法上规定了匿名类要么是实现了前面的接口,要么是从前面的类继承,就着前面父类的名字来写类体。当此类与其他类关系不大时可以用匿名类

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

}

public void paint(Graphics g) {

Iterator Pointit= al.iterator();//泛型指定取出元素时只能是point

while(it.hasNext()) {

Point p = it.next();//由于使用泛型这时候就不用强制转换了

Color c = g.getColor();//保护原有颜色

g.setColor(Color.pink);

g.fillOval(p.x-6, p.y-6, 12, 12);

g.setColor(c);

}

}

public static void main(String []args) {

new MyFrame("点击");

}

}

JAVA中paint()是自动执行的吗?

是的paint()方法只会自动调用一次,而且 你用的时候要自己重写这个方法

调用过一次的 时候 可以在线程里用repaint() 再度调用

关于Graphics ; 楼主的观点大部分是对的,但是有点小问题

首先 你并没有 调用paint(g)方法,而是 系统调用的,或者是你自己repaint()

调用的

如果 你要调用paint()方法,你必须传进来一个 参数 Graphics

Graphics 这个对象的 表示的 是,你的绘制环境

比如 有2个 JFrame jf1,jf2,那么对应2个Graphics g1,g2

(g1=jf1.getGraphics(),g2=jf2.getGraphics())//获取 绘制环境

如果jf1 是显示的,jf2是隐藏的

那么 你自己调用 paint(g2)的时候 ,不会显示绘制的内容,因为

paint()实在jf2上绘制的,

“包含有paint()方法的class实例化一个对象后调用构造方法后就会自动产生Graphics”

Graphics 这个对象不是在 你自己写的 类中产生的

而是 在 JFrame等 一些 可以作为容器类里 已经实例化的

也就是说 他已经定好了 绘制环境,

所以 你写JFrame,什么的 需要实现paint()方法的 时候

你不需要指定一个Graphics 说明你的 绘制环境

PS(你也可试试 在 线程里调用 paint(),好像也可以,因为 毕竟也是一个方法

,我曾经 在 paint()方法 里调用过 repaint(),而不是在线程里调用repaint(),就达到了动画的效果

)

java中paint()的具体用法是什么?

这个方法需要注意的地方不多,也就是重写时,先调用 super.paint(g) 方法

paint方法不需要编写代码调用,只需要重写。

其他看jdk帮助中就行了。

public void paint(Graphics g) {

super.paint(g);// 调用父类的paint方法或调用下面的方法直接绘制组件

g.drawImage(image, 0, 0, null);

g.setFont(new Font("", Font.BOLD, 13));

g.setColor(Color.WHITE);

}

paint

public void paint(Graphics g)绘制容器。该方法将 paint 转发给任意一个此容器子组件的轻量级组件。如果重新实现此方法,那么应该调用 super.paint(g) 方法,从而可以正确地呈现轻量级组件。如果通过 g 中的当前剪切设置完全剪切某个子组件,则不会将 paint() 转发给这个子组件。

覆盖:

类 Component 中的 paint

参数:

g - 指定的 Graphics 窗口

另请参见:

Component.update(Graphics)

JAVA中Paint与paintComponent方法的区别是什么

Component.paint:绘制此组件。

应该绘制组件的内容时调用此方法;例如首次显示组件或者组件已损坏并需要修复时。Graphics 参数中的矩形框设置为需要绘制的区域。重写此方法的 Component 子类不需要调用 super.paint(g)。

出于性能的考虑,首次显示宽度或高度为 0 的 Component 时认为它不需要进行绘制,并且也不需要修复。

Container.paint:绘制容器。该方法将 paint 转发给任意一个此容器子组件的轻量级组件。如果重新实现此方法,那么应该调用 super.paint(g) 方法,从而可以正确地呈现轻量级组件。如果通过 g 中的当前剪切设置完全剪切某个子组件,则不会将 paint() 转发给这个子组件。

Container.paintComponents:绘制此容器中的每个组件。

根据JAVA的API文档说,PAINT是CONTAINER提供的方法,只要容器需要重画的时候就会调用,而paintComponent则是JComponent所提供的方法,它是paint委托的一种重画组件的方法。我的想法是paint只会负责重画容器类的界面例如:Frame Dialog Window之类的,而在这些容器之上的组件则由paint委托paintComponent负责重画。

Java中的repaint和paint

有两点不同:1、repaint有选择的调用update或者paintrepaint() = update或者paint,对于轻量级组件,repaint会调用paint;而对于重量级组件,会调用update。update一般的工作是清屏然后paint。至于为什么repaint度轻量级和重量级的处理有所不同,如果你一定希望知道再追问我。你也可以自己重写update完成自己定制的工作。2、响应方式不一样paint立即响应,而repaint则是发出重绘请求,等待awt线程选择合适的时间进行重绘。这就像,你是一个画家,而你还雇了另外一个画家——awt。有两个方法,完成绘图,第一交给awt线程,但是他什么时候完成绘画完全取决于awt的心情;第二你自己来画,这样更确定,但是你不得不管理许多细节。在非paint方法中,显示的调用任何paint方法,就相当于你自己来画;而repaint就是发出请求交给awt来画。显然我们应该确定究竟谁来画,因为两者交织的画可能带来冲突。比如awt正在绘制的过程中,你的程序乱入,在他绘制一半的图片上涂涂抹抹……。当然java的设计者希望我们把绘制全权交给awt线程来画,而不是自己来画!因为这样最安全和省事。但是我仍然认为在Java游戏编程中还是自己来管理绘制更加灵活。

java关于paint

你这个程序是先执行lauchFrame()这个方法,再调用paint()方法,你在lauchFrame()方法内设置了frame的背景色为绿色,所以导致你程序显示背景色并非你说的黑色,所以,你应该将frame的背景色设置为黑色,即this.setBackground(Color.BLACK);

或者,你在paint()方法里设置this.setBackground(Color.BLACK);也可以,因为,你这个类是继承Frame的,所以,this在这个类中,指的就是你创建的窗口。

关于paintjava和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-10,除非注明,否则均为首码项目网原创文章,转载请注明出处。