如何调用重写的paint方法,在线等 需要补习一下什么叫重载和GUI程序的基本知识1,JPanel中的paint方法应该是paint(Graphics g)2, 虽然你新建了对象,但是还没有显示出来,你怎么调用这个paint方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上的大哥,看来我说不清楚,还是把原例给你看看把??/*这个是一个静态的时钟,本来这个已经画出了轮廓了,但是我还要根据自己的需要来设置分针,秒针,时针,这个时候就需要在paint方法里面加入三个int型的参数代表时间,但是当我把参数加进去,不知道如何调用paint方法,请指教啊*/import javax.swing.*;import java.awt.*;import java.util.*;public class ClockPanel extends JPanel{ public ClockPanel(){ super(); //调用父类的无参构造方法 this.setSize(106,106); //设置钟板是个边长为66象素的正方形 this.setBackground(Color.red); this.setVisible(true); } public void paint(Graphics g){ int xcenter=53; int ycenter=53; g.setColor(Color.magenta); //设置颜色为黑色 g.fillOval(0,0,106,106); //填充圆 g.setColor(Color.cyan); //设置颜色为粉红 g.fillOval(3,3,100,100); //在大圆上填充一个小圆 g.setColor(Color.green); g.fillOval(18,18,70,70); //开始画点和时间点 for(int i=5;i<61;i+=5) if(i!=15&&i!=30&&i!=45&&i!=60){ int x=(int)(Math.cos(i*3.14f/30-3.14f/2)*45+xcenter); int y=(int)(Math.sin(i*3.14f/30-3.14f/2)*45+ycenter); g.setColor(Color.blue); g.drawString(".",x,y); } g.drawString("9",xcenter-45,ycenter+3); g.drawString("3",xcenter+40,ycenter); g.drawString("12",xcenter-8,ycenter-37); g.drawString("6",xcenter-3,ycenter+45); } public static void main(String [] args){ //检测程序 JFrame one =new JFrame("我的钟"); one.setSize(300,300); Container con=one.getContentPane(); con.setLayout(null); ClockPanel an=new ClockPanel(); con.add(an); an.setLocation(50,50); one.setVisible(true); }} 假如我重构了paint方法,如:public void paint(Graphics g,int a,int b)我如何调用这个方法???? 你这里只是重载了paint方法,并不是重写,重写的话应该这样写public void paint(Graphics g){ super.paint(g); ……}调用paint方法是自动的,会在程序启动的时候同构造函数一起加载,或者在程序中间组件外观被破坏的时候(比如你的窗口最大最小化、被别的窗口遮盖了)也会自动调用。如果想自己调用paint方法的话,可以用repaint()方法来调用,不要直接调用paint()方法。这个问题我都回答过N遍了,快成专业户了,嘿嘿:) 再问个问题我知道piant方法是默认的,只要创建了该对象,然后显示出来对象,对象会自动的调用paint方法,但是我要是想把调用paint那一句写出来怎么写呢??比如one.paint(里面如何写???????); 如果重载了,那就直接调用呗。关键你的程序就是少了super.paint(g);这个东西 不是这样调用的:One.paint(//这个里面怎么样调用啊????);是这样调用的:One.repaint(); //这个方法会自动调用paint()这个方法. angues1980(石头心) 大哥,那么要是里面paint是我写的一个有参数的方法,是不是也用repaint啊?? 要是paint方法是我写的一个有参数的方法比如paint(Graphics g,int a),如何调用啊?? 想让你的时钟走起来,加一个Threadpublic static void main(String [] args){ //检测程序 JFrame one =new JFrame("我的钟"); one.setSize(300,300); Container con=one.getContentPane(); con.setLayout(null); final ClockPanel an=new ClockPanel();//加上这个new Thread( new Runnable(){ public void run(){ an.repaint(); try{ Thread.sleep(1000); }catch(Exception ex){} }}).start(); con.add(an); an.setLocation(50,50); one.setVisible(true); } 不用啊,即然你自己写了一个paint(Graphics g,int a,int b),那你用对象调用One.paint(g1,a1,b1)传三个参掉用就行了,可以在重载的paint(Graphics g,int a,int b)方法里加上this.paint(g1)应该可以吧。 要是paint方法是我写的一个有参数的方法比如paint(Graphics g,int a),如何调用啊??~~~~~~~~~~~~~~~~~~~paint方法是父类定义的只有一个Graphics对象参数的方法你不能用你的多加2个参数的方法来替换这个2个不同的方法 其实你这种机制真的很不推荐使用,干嘛非要传参调用呢,在类里声明基本类型成员int a,b;不是更好么。传来传去最后还要重载方法,从哪方面来说都不推荐。 To angues1980(石头心):import javax.swing.*;import java.awt.*;import java.util.*;public class ClockPanel extends JPanel{ public ClockPanel(){ super(); //调用父类的无参构造方法 this.setSize(106,106); //设置钟板是个边长为66象素的正方形 this.setBackground(Color.red); this.setVisible(true); } public void paint(Graphics g,int h,int m,int s){ this.paint(g); int xcenter=53; int ycenter=53; g.setColor(Color.magenta); //设置颜色为黑色 g.fillOval(0,0,106,106); //填充圆 g.setColor(Color.cyan); //设置颜色为粉红 g.fillOval(3,3,100,100); //在大圆上填充一个小圆 g.setColor(Color.green); g.fillOval(18,18,70,70); //开始画点和时间点 for(int i=5;i<61;i+=5) if(i!=15&&i!=30&&i!=45&&i!=60){ int x=(int)(Math.cos(i*3.14f/30-3.14f/2)*45+xcenter); int y=(int)(Math.sin(i*3.14f/30-3.14f/2)*45+ycenter); g.setColor(Color.blue); g.drawString(".",x,y); } g.drawString("9",xcenter-45,ycenter+3); g.drawString("3",xcenter+40,ycenter); g.drawString("12",xcenter-8,ycenter-37); g.drawString("6",xcenter-3,ycenter+45); int xs=(int)(Math.cos(s*3.14f/30-3.14f/2)*45+xcenter); //利用三角公式求秒针的x坐标 int ys=(int)(Math.sin(s*3.14f/30-3.14f/2)*45+ycenter); //利用三角公式求秒针的y坐标 int xm=(int)(Math.cos(m*3.14f/30-3.14f/2)*40+xcenter); //利用三角公式求分针的x坐标 int ym=(int)(Math.sin(m*3.14f/30-3.14f/2)*40+ycenter); //利用三角公式求分针的y坐标 int xh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*30+xcenter); int yh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*30+ycenter); } public static void main(String [] args){ //检测程序 JFrame one =new JFrame("我的钟"); one.setSize(300,300); Container con=one.getContentPane(); con.setLayout(null); ClockPanel an=new ClockPanel(); an.repaint();*******************************本来这里如果不写是个钟,写在什么都没有了,你看这个位置怎么改才能够调用上面的paint方法 con.add(an); an.setLocation(50,50); one.setVisible(true); }} angues1980(石头心) 哦,你提醒我了,谢谢啊,我都是自学得,很多地方都搞不清楚,总看到你现在帮人家解决问题,真是好人啊能否把你得MSN邮箱地址给我??交个朋友啊http://community.csdn.net/Expert/topic/3818/3818913.xml?temp=5.910891E-02进去这里吧,再给你20分 我原来贴过一个时钟的例子,你可以去看看http://community.csdn.net/Expert/topic/3779/3779025.xml?temp=.8223535你这种机制我强烈不推荐使用,如果你的int h,int m,int s是当前时间的话,可以用Calendar cal = Calendar.getInstance();int hours = cal.get(Calendar.HOUR);int minutes = cal.get(Calendar.MINUTE);int seconds = cal.get(Calendar.SECOND);直接在paint(Graphics g)方法里面得到如果是你设置的日期,那就应该给h,m,s设置成这个类的成员,这样也可以在重写的paint(Graphics g)方法里面调用。 overcast(http://blog.csdn.net/overcast) 大哥,也感谢你了 求webservice axis2 与 cxf 的区别? IO操作的小问题,菜鸟求助帖 最基本的图形界面问题,谁来帮忙解答 关于java数据类型byte的疑问,谢谢 【SWT/Jface】如何实现带图片的滚动条 数组排序问题! SOSS! 关于httpurlconnection 速度的问题 这段代码的结果是多少呢? VISUAL J++6 好用吗? 求一个基于javamail的邮件客户端 一个基础问题 applet的问题,在线等待!
/*这个是一个静态的时钟,本来这个已经画出了轮廓了,但是我还要根据自己的需要来设置分针,秒针,时针,这个时候就需要在paint方法里面加入三个int型的参数代表时间,但是当我把参数加进去,不知道如何调用paint方法,请指教啊*/
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class ClockPanel extends JPanel{
public ClockPanel(){
super(); //调用父类的无参构造方法
this.setSize(106,106); //设置钟板是个边长为66象素的正方形
this.setBackground(Color.red);
this.setVisible(true); }
public void paint(Graphics g){
int xcenter=53;
int ycenter=53;
g.setColor(Color.magenta); //设置颜色为黑色
g.fillOval(0,0,106,106); //填充圆
g.setColor(Color.cyan); //设置颜色为粉红
g.fillOval(3,3,100,100); //在大圆上填充一个小圆
g.setColor(Color.green);
g.fillOval(18,18,70,70);
//开始画点和时间点
for(int i=5;i<61;i+=5)
if(i!=15&&i!=30&&i!=45&&i!=60){
int x=(int)(Math.cos(i*3.14f/30-3.14f/2)*45+xcenter);
int y=(int)(Math.sin(i*3.14f/30-3.14f/2)*45+ycenter);
g.setColor(Color.blue);
g.drawString(".",x,y);
}
g.drawString("9",xcenter-45,ycenter+3);
g.drawString("3",xcenter+40,ycenter);
g.drawString("12",xcenter-8,ycenter-37);
g.drawString("6",xcenter-3,ycenter+45); }
public static void main(String [] args){ //检测程序
JFrame one =new JFrame("我的钟");
one.setSize(300,300);
Container con=one.getContentPane();
con.setLayout(null);
ClockPanel an=new ClockPanel(); con.add(an);
an.setLocation(50,50);
one.setVisible(true); }}
我如何调用这个方法????
public void paint(Graphics g)
{
super.paint(g);
……
}
调用paint方法是自动的,会在程序启动的时候同构造函数一起加载,或者在程序中间组件外观被破坏的时候(比如你的窗口最大最小化、被别的窗口遮盖了)也会自动调用。
如果想自己调用paint方法的话,可以用repaint()方法来调用,不要直接调用paint()方法。
这个问题我都回答过N遍了,快成专业户了,嘿嘿:)
我知道piant方法是默认的,只要创建了该对象,然后显示出来对象,对象会自动的调用paint方法,但是我要是想把调用paint那一句写出来怎么写呢??
比如one.paint(里面如何写???????);
One.paint(//这个里面怎么样调用啊????);
是这样调用的:
One.repaint(); //这个方法会自动调用paint()这个方法.
大哥,那么要是里面paint是我写的一个有参数的方法,是不是也用repaint啊??
JFrame one =new JFrame("我的钟");
one.setSize(300,300);
Container con=one.getContentPane();
con.setLayout(null);
final ClockPanel an=new ClockPanel();
//加上这个
new Thread(
new Runnable(){
public void run(){
an.repaint();
try{
Thread.sleep(1000);
}catch(Exception ex){}
}
}
).start(); con.add(an);
an.setLocation(50,50);
one.setVisible(true); }
~~~~~~~~~~~~~~~~~~~paint方法是父类定义的只有一个Graphics对象参数的方法
你不能用你的多加2个参数的方法来替换
这个2个不同的方法
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class ClockPanel extends JPanel{
public ClockPanel(){
super(); //调用父类的无参构造方法
this.setSize(106,106); //设置钟板是个边长为66象素的正方形
this.setBackground(Color.red);
this.setVisible(true); }
public void paint(Graphics g,int h,int m,int s){
this.paint(g);
int xcenter=53;
int ycenter=53;
g.setColor(Color.magenta); //设置颜色为黑色
g.fillOval(0,0,106,106); //填充圆
g.setColor(Color.cyan); //设置颜色为粉红
g.fillOval(3,3,100,100); //在大圆上填充一个小圆
g.setColor(Color.green);
g.fillOval(18,18,70,70);
//开始画点和时间点
for(int i=5;i<61;i+=5)
if(i!=15&&i!=30&&i!=45&&i!=60){
int x=(int)(Math.cos(i*3.14f/30-3.14f/2)*45+xcenter);
int y=(int)(Math.sin(i*3.14f/30-3.14f/2)*45+ycenter);
g.setColor(Color.blue);
g.drawString(".",x,y);
}
g.drawString("9",xcenter-45,ycenter+3);
g.drawString("3",xcenter+40,ycenter);
g.drawString("12",xcenter-8,ycenter-37);
g.drawString("6",xcenter-3,ycenter+45);
int xs=(int)(Math.cos(s*3.14f/30-3.14f/2)*45+xcenter); //利用三角公式求秒针的x坐标
int ys=(int)(Math.sin(s*3.14f/30-3.14f/2)*45+ycenter); //利用三角公式求秒针的y坐标
int xm=(int)(Math.cos(m*3.14f/30-3.14f/2)*40+xcenter); //利用三角公式求分针的x坐标
int ym=(int)(Math.sin(m*3.14f/30-3.14f/2)*40+ycenter); //利用三角公式求分针的y坐标
int xh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*30+xcenter);
int yh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*30+ycenter); }
public static void main(String [] args){ //检测程序
JFrame one =new JFrame("我的钟");
one.setSize(300,300);
Container con=one.getContentPane();
con.setLayout(null);
ClockPanel an=new ClockPanel();
an.repaint();*******************************本来这里如果不写是个钟,写在什么都没有了,你看这个位置怎么改才能够调用上面的paint方法
con.add(an);
an.setLocation(50,50);
one.setVisible(true); }}
哦,你提醒我了,谢谢啊,
我都是自学得,很多地方都搞不清楚,
总看到你现在帮人家解决问题,真是好人啊
能否把你得MSN邮箱地址给我??交个朋友啊
http://community.csdn.net/Expert/topic/3818/3818913.xml?temp=5.910891E-02
进去这里吧,再给你20分
http://community.csdn.net/Expert/topic/3779/3779025.xml?temp=.8223535
你这种机制我强烈不推荐使用,如果你的int h,int m,int s是当前时间的话,可以用
Calendar cal = Calendar.getInstance();
int hours = cal.get(Calendar.HOUR);
int minutes = cal.get(Calendar.MINUTE);
int seconds = cal.get(Calendar.SECOND);
直接在paint(Graphics g)方法里面得到
如果是你设置的日期,那就应该给h,m,s设置成这个类的成员,这样也可以在重写的paint(Graphics g)方法里面调用。
大哥,也感谢你了