比如显示一个表,表上有刻度,让刻度进行
旋转(当然,实际中不会旋转,是指针进行旋转),现在我让课都进行旋转,怎么做,
我想到的时计算时将旋转角度进行变化,但是好像效率不高,
如果能将刻度视为一个整体,进行整体的旋转可以吗?
代码如下:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
//去锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//清空原来的图形
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
g2d.setColor(Color.BLACK);
//圆中心坐标
int xCenter = this.getWidth() / 2;
int yCenter = this.getHeight() / 2;
// 计算半径
int radius = (int) (Math.min(this.getWidth(), this.getHeight()) * 0.8*0.5); //因为是半径,所以 1/2
// 画圆
g2d.drawOval(xCenter - radius, yCenter - radius, radius * 2, radius * 2);
//画时钟的12个数字(如果用rotate方法则数字会倾斜倒立)
for (int i = 0; i < 12; i++) {
//已知圆中心占坐标(x0,y0),半径r,角度a0,则圆上任一点坐标(x,y)计算:
//x = x0 + r * cos(ao * 3.14 /180)
//y = y0 + r * sin(ao * 3.14 /180)
double dd = Math.PI / 180 * i * (360 / 12); //每次转360/12度
int x = (xCenter - 4) + (int) ((radius - 12) * Math.cos(dd));
int y = (yCenter + 4) + (int) ((radius - 12) * Math.sin(dd));
//因为是从顺时钟3点钟开始画,所以索引i需要加上3
int j = i + 3; //这里可以改
if (j > 12) {
j = j - 12;
}
g2d.drawString(Integer.toString(j), x, y);
}
AffineTransform old = g2d.getTransform();
//时钟的60个刻度
for (int i = 0; i < 60; i++) {
int w = i % 5 == 0 ? 5 : 3;
g2d.fillRect(xCenter - 2, 28, w, 3);
g2d.rotate(Math.toRadians(6), xCenter, yCenter); //每一小格转6度, 以圆心为中心点
}
//设置旋转重置
g2d.setTransform(old);
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
//画日期和星期
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd"); //datadormat是一个抽象类
DateFormat df2 = new SimpleDateFormat("E"); //星期的格式
g2d.drawRoundRect(xCenter - 30, yCenter + 30, 72, 35, 10, 10);
g2d.drawString(df1.format(calendar.getTime()), xCenter - 25, yCenter + 45);
g2d.drawString(df2.format(calendar.getTime()), xCenter - 12, yCenter + 60);
// 画时钟的图形
double hAngle = (hour - 12 + minute / 60d) * 360d / 12d;
g2d.rotate(Math.toRadians(hAngle), xCenter, yCenter);
int xhArr[] = {xCenter, xCenter + 9, xCenter, xCenter - 9};
int yhArr[] = {65, yCenter, yCenter + 10, yCenter};
g2d.drawPolygon(xhArr, yhArr, xhArr.length);
g2d.setTransform(old);
// 画分钟的图形
double mAngle = (minute + second / 60d) * 360d / 60d;
g2d.rotate(Math.toRadians(mAngle), xCenter, yCenter);
int xmArr[] = {xCenter, xCenter + 6, xCenter, xCenter - 6};
int ymArr[] = {45, yCenter, yCenter + 12, yCenter};
g2d.drawPolygon(xmArr, ymArr, xmArr.length);
g2d.setTransform(old);
// 画秒钟的图形
double sAngle = second * 360d / 60d;
g2d.rotate(Math.toRadians(sAngle), xCenter, yCenter);
g.drawLine(xCenter, yCenter + 10, xCenter, 35);
}
这个该怎么写?除了每次计算时进行 读书+旋转角度 ,这个方法除外
在此感谢