提问关于JAVA中repaint的问题

oo笨小孩oo 2012-08-13 11:45:52
我写了一个图像旋转的代码

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;


public class Circle extends JPanel{
public int value;

public Circle(){

}
public Circle(int value){
this.value = value;
}
public int getValue(){
return value;
}

public void setValue(int value){
this.value = value;
repaint();
}


protected void paintComponent(Graphics g){
super.paintComponent(g);
int clockRadius = (int)(Math.min(getWidth(), getHeight())*0.8*0.5);
int xCenter = getWidth()/2;
int yCenter = getHeight()/2;
g.setColor(Color.RED);
g.drawOval(xCenter-clockRadius, yCenter-clockRadius, 2*clockRadius, 2*clockRadius);

int line1 = (int)(clockRadius);
int line1X = (int) (xCenter-clockRadius*Math.cos(value*(2*Math.PI/60)));
int line1Y = yCenter+value;
g.drawLine(xCenter, yCenter, line1X, line1Y);

}
public Dimension getPreferredSize() {
return new Dimension(100,100);
}

}


在运行程序时通过滑动条修改value的值,但是图像并没有发生改变,我在调试中发现滑动条移动时value的值是在改变的,但是line1X 和line1Y 的值并没有变,这是怎么回事呢,是repaint没起作用吗
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cc不会飞 2012-08-14
  • 打赏
  • 举报
回复
把protected改成public试试
FFF9527 2012-08-14
  • 打赏
  • 举报
回复

public static void main(String[] args) throws Exception {
JFrame app = new JFrame("测试");
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(400, 500);
Circle panel = new Circle(20);
app.add(panel);
app.setVisible(true);
for(int i = 0;i<100;i++)
{
Thread.sleep(100);
panel.setValue(20 + i*5);
}
}

试了下,木有问题。。。
scbb 2012-08-14
  • 打赏
  • 举报
回复
方法名
paintComponent
改成
paintComponents
ace62 2012-08-14
  • 打赏
  • 举报
回复
不知你是如何修改Circle实例中value的值?是直接修改value还是调用setValue方法,必须调用setValue才行

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧