Анимация пунктирной линии с помощью java.awt.BasicStroke

Есть ли способ создать анимированную пунктирную линию с помощью BasicStroke из java.awt? Мое желание состоит в том, чтобы иметь бегущую пунктирную линию таким же образом, что и инструмент прямоугольного маркера Photoshop, который анимирован.

Используйте пунктирную линию, Thread (или 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,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); } }); } } 
  • Каков обычный способ управления частотой кадров?
  • Алгоритм для выделения перекрывающихся прямоугольников?
  • Как я могу получить и использовать заголовочный файл в моей программе на C ++?
  • График реального времени в MATLAB
  • Лучший алгоритм для согласования цветов.
  • Что такое фильтры с верхним и нижним проходом?
  • Математически вычислить простой графический конвейер
  • Как вы заказываете цвета заливки в ggplot2 geom_bar
  • Что делает glLoadIdentity () в OpenGL?
  • Использование awt с Android
  • Масштабирование / перевод фигуры в заданный прямоугольник с использованием AffineTransform
  • Давайте будем гением компьютера.