关于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); 就有背景颜色? 展开
程序:
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); 就有背景颜色? 展开
1个回答
展开全部
直接看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()
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()
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询