zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java中paint方法和paintComponent方法的不同

JAVA方法 不同 Paint
2023-09-14 08:57:54 时间

/*

   1.由Component.java源代码中可以看见其中的paint()方法体是空的,在Container中重写了该方法,其子类Window等也重写了该方法

   2.由JComponent.java源代码中可以看见其中的paint()方法中调用paintComponent, paintChildren, paintBorder等方法;

     所以该类中的paint方法会影响子组件的绘制, 而paintComponent方法只会影响该组件本身

   3.paint方法 和 paintComponent方法都是对一个组件进行渲染的(组件创建并显示之后),并不是产生和显示该组件的!

   4.swing 组件和 awt组件 paint方法的不同:awt组件的paint方法有自动刷新背景颜色的功能, 而swing组件一定要调用super.paint()

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class BkGnd extends Frame{

   public BkGnd(){

       setTitle("更换背景!");

       setSize(new Dimension(600, 600));

       setLayout(new FlowLayout());

       myPanelOne panel = new myPanelOne();

       panel.setBackground(Color.yellow);

       panel.setPreferredSize(new Dimension(500, 500));

       myPanelTwo pl = new myPanelTwo();

       pl.setPreferredSize(new Dimension(400, 400));

       pl.setBackground(Color.blue);

       panel.add(pl);

       add(panel);

       addWindowListener(new MyClosingListener());

   public static void main(String args[]){

      BkGnd myFrame = new BkGnd();

      myFrame.setVisible(true);

//第一种情况: 如果没有super.paint(g);则该面板上的组件将不能正常显示

//如果加上super.paint(g);那么首先通过该方法将该面板上的组件显示出来,然后在执行super.paint(g);下面的绘图语句。会导致将该面板上的组件覆盖

//父类的paint方法来负责调用paintComponent, paintChildren, paintBorder, update方法

class myPanelOne extends JPanel{

   public void paint(Graphics g){

      super.paint(g);

      g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 400, 400, this);

class myPanelTwo extends JPanel{

   public void paintComponent(Graphics g){

      super.paintComponent(g);

      g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 200, 200, this);

//第二种就可以的到正常预想的结果

class myPanelOne extends JPanel{

   public void paintComponent(Graphics g){

      super.paintComponent(g);//用于绘制自身面板的背景

      g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 400, 400, this);

class myPanelTwo extends JPanel{

   public void paintComponent(Graphics g){

      super.paintComponent(g);

      g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 200, 200, this);

//重写Component类中的paint()方法的子类,super.paint(g) 不会影响其子组件。

//第三种的效果等同于第二种的效果(正常的预想的结果)

class myPanelOne extends Panel{

   public void paint(Graphics g){

      //super.paint(g);//加和不加都一样

      g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 400, 400, this);

class myPanelTwo extends Panel{

   public void paint(Graphics g){

      g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 200, 200, this);

class MyClosingListener extends WindowAdapter{

   public void windowClosing(WindowEvent e){

      System.exit(0);

}

Java String 的 常量池 和 intern 方法 简析 Java String 的 常量池 和 intern 方法 简析字符串常量池和 intern 方法 先举个例子,我们创建 10000 个相同的 String,并且不使用常量池 String[] list = new String[10000]; for (int i = 0; i 10000; i++) { list[i] = new String(new char[]{ a , b , c 结果是:每个 String 都用新开的对象,占用大量内存
现在我们这样创建,增加一个 map ,key 和 value 内容一样,每次取的时候,先检查一下 map 里面有没
Java的学习笔记(04)方法 Java方法01 方法是语句的集合,执行一个功能。方法再程序中被创建,再其他地方被引用 一个方法只做一个功能 方法的命名规则:首字母小写,驼峰规则。 package method; public class Demo01 { //mian 方法 public static void main(String[] args) { int sum = add(1,2); //调用一个方法:加法 // 实际参数:实际调用传递给
【Java编程进阶】方法初识 方法是组合在一起来执行操作语句的集合`,将具有独立功能的代码块组织成为一个整体,使其具有特殊功能,并且能实现达到代码复用的效果。例如我们要在程序中多次判断一个数字是奇数还是偶数,这时,我们就可以将判断一个数的奇偶性的代码段封装成一个方法,后面再使用时只需要调用这个方法,大大提高了编程的效率和代码的复用性。
Java练习题——抽象类、方法以及接口 由于三种动物都有共同属性:名字和属性,并且有共同行为:吃,所以只需要在共同父类(Animal)中编写标准Javabean类即可
Java练习题——方法(基础版) 求数组内最大值以及定义一个随机数组在之前已经介绍过了,只需要将这部分的代码打包放在一个方法内,并在main方法中调用即可