关于java paint和paintComponent方法在具体程序中的问题!急!!在线等!!!

目的:在绿色框架中画上4个椭圆。程序:importjava.awt.Color;importjava.awt.Graphics;importjavax.swing.JFr... 目的:在绿色框架中画上4个椭圆。
程序:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Hole extends JFrame {
public static void main(String[] args) {
Hole frame = new Hole();
frame.lauchFrame();
}

Hole(){
add(new NewPanel());
}

void lauchFrame(){ // 创建框架
setTitle("MouseHit");
setSize(400,500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false); // 不让窗口改变大小
}
}

class NewPanel extends JPanel{

protected void paintComponent(Graphics g){
//public void paint(Graphics g) {
super.paintComponents(g);
//super.paint(g);

int w = 140;
int l = 70;

g.drawOval(400/2-w/2, 50, w, l); // 上方的洞
g.drawOval(400/2-w/2, 500-50*2-l, w, l); // 下方的洞
g.drawOval(30, 500/2-l/2-25, w, l); // 左边的洞
g.drawOval(400-30-w, 500/2-l/2-25, w, l); // 右边的洞

Color backgroundColor = new Color(80,120,30);
setBackground(backgroundColor); // 设置窗口背景颜色
}
}

问题:在 class NewPanel extends JPanel{ } 中,为什么
protected void paintComponent(Graphics g){
super.paintComponents(g); 无法显出背景颜色,而
public void paint(Graphics g) {
super.paint(g); 就有背景颜色?
展开
 我来答
百度网友ef10e91
2010-09-03 · TA获得超过1822个赞
知道大有可为答主
回答量:1223
采纳率:50%
帮助的人:1295万
展开全部
直接看API
public void print(Graphics g)调用此方法打印指定 Graphics 的组件。此方法将导致对 printComponent、printBorder 和 printChildren 的调用。如果目的是定制打印外观的方式,建议重写前面提及的方法之一,而不是此方法。但是,如果想在调用超类行为之前准备好状态,则重写此方法很有用。例如,如果想在打印前更改组件的背景颜色,则可以执行以下操作:
public void print(Graphics g) {
Color orig = getBackground();
setBackground(Color.WHITE);

// wrap in try/finally so that we always restore the state
try {
super.print(g);
} finally {
setBackground(orig);
}
}
另外,对于将打印委托给其他对象的组件,在绘制期间就可以查询组件是否在打印操作的中间。isPaintingForPrint 方法提供了这种功能并且此方法将改变其返回值:在即将呈现前改为 true,在呈现后立即改为 false。随着每一次更改,在此组件上都会触发一个名为 "paintingForPrint" 的属性更改事件。

此方法设置组件的状态,使得双缓冲无法使用:绘制将直接在传入的 Graphics 上完成。

覆盖:
类 Container 中的 print
参数:
g - 在其中进行绘制的 Graphics 上下文
另请参见:
printComponent(java.awt.Graphics), printBorder(java.awt.Graphics), printChildren(java.awt.Graphics), isPaintingForPrint()
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式