java中paint中的super.paint
时间: 2023-12-15 13:05:54 浏览: 159
在 Java 中,当我们重写 `paint` 方法时,通常会调用 `super.paint` 方法来确保父类的绘制逻辑也被执行。
`super.paint` 是一个用于绘制组件的方法,它是在 `java.awt.Component` 类中定义的。当调用 `super.paint` 方法时,它会执行一些基本的绘制操作,如清除背景、绘制边框等。然后,我们可以在 `paint` 方法中添加自定义的绘制代码。
例如,如果我们在一个自定义的 `JPanel` 类中重写了 `paint` 方法,我们可以在方法的开头调用 `super.paint(g)` 来确保父类的绘制逻辑也被执行,然后再添加自己的绘制代码:
```java
public class MyPanel extends JPanel {
@Override
public void paint(Graphics g) {
super.paint(g);
// 添加自定义的绘制代码
// ...
}
}
```
这样做的好处是,我们可以在保留父类绘制逻辑的同时,添加自己的绘制效果。否则,如果我们不调用 `super.paint(g)`,父类的绘制逻辑将被覆盖,可能导致一些不希望的结果。
相关问题
super.paint在java
super.paint() 是一个在 Java 中用于绘制组件的方法。它是在继承自父类(通常是 JComponent 或其子类)的自定义组件中重写的方法。
当一个组件需要在屏幕上绘制时,Java 会调用该组件的 paint() 方法。在自定义组件中,我们可以通过重写 paint() 方法来实现自定义的绘制逻辑。然而,为了保持父类的绘制行为,我们通常会在重写的 paint() 方法中调用 super.paint()。
super.paint() 方法会执行父类的绘制逻辑,例如清空组件的背景、绘制边框等。然后我们可以在调用 super.paint() 后面添加自己的绘制代码,以实现对组件的定制绘制。
以下是一个示例代码,展示了如何在自定义的组件中使用 super.paint() 方法:
```java
import javax.swing.*;
import java.awt.*;
class CustomComponent extends JComponent {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); // 调用父类的绘制方法
// 添加自定义绘制代码
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
}
}
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CustomComponent customComponent = new CustomComponent();
frame.add(customComponent);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
```
在上述代码中,CustomComponent 继承自 JComponent,并重写了 paintComponent() 方法。在 paintComponent() 方法中,我们首先调用了 super.paintComponent(g),然后绘制了一个红色的矩形作为自定义的绘制效果。
用中文注释一下代码://Clock.java import java.awt.*; import javax.swing.*; import java.util.*; //import Date and Locale import java.text.SimpleDateFormat; public class Clock extends JApplet implements Runnable { Thread clockThread; public void init() { //在JApplet的方法init 中,创建一线程命名为Clock clockThread = new Thread(this, "Clock-thread"); clockThread.start(); } //实现Runnable接口中的方法run,每隔一秒刷新时钟画面 public void run() { boolean flag=true; while (flag) { repaint(); try { clockThread.sleep(1000); } catch (InterruptedException e) { flag=false;} } //end of while } //end of run public void paint(Graphics g){ //JApplet的方法paint,显示当前时钟对象的值 super.paint(g); SimpleDateFormat formatter = new SimpleDateFormat (" hh:mm:ss ", Locale.getDefault()); Date currentDate = new Date(); String lastdate = formatter.format(currentDate); g.drawString(lastdate ,5, 10); } public void destroy() { //JApplet的方法 clockThread.interrupt(); } }
//Clock.java
//导入需要使用的类库
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.text.SimpleDateFormat;
//定义一个类Clock,继承自JApplet类,并实现Runnable接口
public class Clock extends JApplet implements Runnable {
//声明一个线程对象clockThread
Thread clockThread;
//在JApplet的方法init中,初始化clockThread线程并启动
public void init() {
clockThread = new Thread(this, "Clock-thread");
clockThread.start();
}
//实现Runnable接口中的方法run,每隔一秒刷新时钟画面
public void run() {
boolean flag=true;
while (flag) {
repaint(); //调用repaint()方法,刷新时钟画面
try {
clockThread.sleep(1000); //线程休眠一秒钟
} catch (InterruptedException e) {
flag=false;
}
} //end of while
} //end of run
//实现JApplet的方法paint,显示当前时钟对象的值
public void paint(Graphics g){
super.paint(g); //调用父类的paint()方法
SimpleDateFormat formatter = new SimpleDateFormat (" hh:mm:ss ", Locale.getDefault()); //创建日期格式化对象
Date currentDate = new Date(); //获取当前时间
String lastdate = formatter.format(currentDate); //将当前时间格式化
g.drawString(lastdate ,5, 10); //在指定位置绘制时间字符串
}
//实现JApplet的方法destroy,中断线程
public void destroy() {
clockThread.interrupt(); //中断线程
}
}
阅读全文