BasicStroke用法[转]

 1.     基本概念

在JAVA 2D开发中,BasicStroke用于定义线条的特征,我们可以调用Graphics2D类中的setStroke方法来将新创建的BasicStroke对象设置进去。BasicStroke的构造方法如下所示:

 

 

 

对图形的一些专业名词不熟悉的程序员来说,想要根据API说明文档来理解这个方法的使用,实在有点过于困难了,所以,在这里整理了一下,便于大家理解。

 

2.     构造方法参数说明

2.1  width

这个参数最容易理解,表示线条的宽度

2.2  cap

只能取三个值:CAP_BUTT, CAP_ROUND or CAP_SQUARE,表示不同的线端。

 

意思如下:

 

 

 

2.3  join

这个参数表示当两条线连接时,连接处的形状,可以取JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER三个值。

 

意思如下:

  

2.4  miterlimit

当你使用JOIN_MITER这种策略来表示连接处形状的时候,由于两根线的连接角度可能很小,那么,就会导致延伸出来的那个角特别长!本参数用来限制那个尖角的最大长度!当你使用JOIN_MITER策略的时候,本参数必须大于1,本参数的默认值是10.0f 。

 

2.5  dash[]

画虚线的时候,使用这个参数,虚线是由:“线+缺口+线+缺口+线+缺口……”来组成的。所以本参数就是定义的这些线、缺口的长度:{线的长度,缺口的长度,线的长度,缺口的长度……}

2.6  dash_phase

最后一个参数是跟dash[]这个数组配合的参数,表示在画虚线的时候,从一定的偏移量处开始画。

下面这个图,统一说明了dash[]和dash_phase的意思:

 

转自:http://blog.csdn.net/li_tengfei/article/details/6098093 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现时钟表盘可以使用Java的Swing组件来绘制。下面是一个简单的示例: ```java import javax.swing.*; import java.awt.*; public class ClockFace extends JPanel { private int hours = 0; private int minutes = 0; private int seconds = 0; private int radius = 0; public ClockFace(int hours, int minutes, int seconds, int radius) { this.hours = hours; this.minutes = minutes; this.seconds = seconds; this.radius = radius; } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; int width = getWidth(); int height = getHeight(); // 绘制表盘 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setColor(Color.WHITE); g2.fillOval(0, 0, 2 * radius, 2 * radius); // 绘制小时刻度 g2.setColor(Color.BLACK); for (int i = 0; i < 12; i++) { double angle = Math.PI / 6 * i; int x1 = (int) (radius * Math.sin(angle) + radius); int y1 = (int) (radius * Math.cos(angle) + radius); int x2 = (int) ((radius - 15) * Math.sin(angle) + radius); int y2 = (int) ((radius - 15) * Math.cos(angle) + radius); g2.drawLine(x1, y1, x2, y2); } // 绘制分钟刻度 g2.setColor(Color.LIGHT_GRAY); for (int i = 0; i < 60; i++) { if (i % 5 != 0) { double angle = Math.PI / 30 * i; int x1 = (int) (radius * Math.sin(angle) + radius); int y1 = (int) (radius * Math.cos(angle) + radius); int x2 = (int) ((radius - 5) * Math.sin(angle) + radius); int y2 = (int) ((radius - 5) * Math.cos(angle) + radius); g2.drawLine(x1, y1, x2, y2); } } // 绘制时针 g2.setColor(Color.BLACK); double angle = Math.PI / 6 * ((hours % 12) + minutes / 60.0); int x = (int) ((radius - 50) * Math.sin(angle) + radius); int y = (int) ((radius - 50) * Math.cos(angle) + radius); g2.setStroke(new BasicStroke(3.0f)); g2.drawLine(radius, radius, x, y); // 绘制分针 g2.setColor(Color.BLACK); angle = Math.PI / 30 * minutes; x = (int) ((radius - 30) * Math.sin(angle) + radius); y = (int) ((radius - 30) * Math.cos(angle) + radius); g2.setStroke(new BasicStroke(2.0f)); g2.drawLine(radius, radius, x, y); // 绘制秒针 g2.setColor(Color.RED); angle = Math.PI / 30 * seconds; x = (int) ((radius - 20) * Math.sin(angle) + radius); y = (int) ((radius - 20) * Math.cos(angle) + radius); g2.setStroke(new BasicStroke(1.0f)); g2.drawLine(radius, radius, x, y); } public static void main(String[] args) { JFrame frame = new JFrame("Clock"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); frame.setLocationRelativeTo(null); ClockFace clockFace = new ClockFace(12, 30, 0, 150); frame.getContentPane().add(clockFace); frame.setVisible(true); } } ``` ClockFace继承JPanel,并重写了paintComponent方法,该方法用于绘制时钟表盘。在构造函数中,传入了时、分、秒和表盘半径等参数。在paintComponent方法中,首先绘制了表盘圆形,然后绘制了小时刻度和分钟刻度。接着,根据时、分、秒计算出时针、分针和秒针的坐标,并绘制出来。在main方法中,创建一个JFrame窗口,并将ClockFace实例添加到窗口中。最后设置窗口的可见性即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值