加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用java.awt.BasicStroke动画化虚线

发布时间:2020-12-15 05:20:13 所属栏目:Java 来源:网络整理
导读:有没有办法使用 java.awt中的BasicStroke生成动画虚线?我的愿望是以与photoshop的矩形品牌工具的动画线相同的方式运行虚线. 解决方法 使用虚线,线程(或Swing Timer)将它们与repaint()结合起来,并对破折号的起点和终点进行一些调整 – 然后就可以了. 例 pack
有没有办法使用 java.awt中的BasicStroke生成动画虚线?我的愿望是以与photoshop的矩形品牌工具的动画线相同的方式运行虚线.

解决方法

使用虚线,线程(或Swing Timer)&将它们与repaint()结合起来,并对破折号的起点和终点进行一些调整 – 然后就可以了.

package test;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class AnimatedStroke {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                BasicStroke dashedStroke;
                final int width = 100;
                final int height = 30;
                final BufferedImage image = new BufferedImage(
                        width,height,BufferedImage.TYPE_INT_ARGB);
                final JLabel label = new JLabel(new ImageIcon(image));
                int pad = 5;
                final Shape rectangle = new Rectangle2D.Double(
                        (double)pad,(double)pad,(double)(width-2*pad),(double)(height-2*pad));

                ActionListener listener = new ActionListener() {

                    float dashPhase = 0f;
                    float dash[] = {5.0f,5.0f};
                    @Override
                    public void actionPerformed(ActionEvent ae) {
                        dashPhase += 9.0f;
                        BasicStroke dashedStroke = new BasicStroke(
                                1.5f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER,1.5f,//miter limit
                                dash,dashPhase
                                );
                        Graphics2D g = image.createGraphics();

                        g.setColor(Color.WHITE);
                        g.fillRect(0,width,height);

                        g.setColor(Color.BLACK);
                        g.setStroke(dashedStroke);
                        g.draw(rectangle);

                        g.dispose();
                        label.repaint();
                        /*
                        if (dashPhase<100f) {
                            try {
                                ImageIO.write(
                                        image,"PNG",new File("img" + dashPhase + ".png"));
                            } catch(IOException ioe) {
                                // we tried
                            }
                        }*/
                    }
                };
                Timer timer = new Timer(40,listener);
                timer.start();
                JOptionPane.showMessageDialog(null,label);
            }
        });
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读