首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Swing中的动画线

Java Swing中的动画线
EN

Stack Overflow用户
提问于 2012-04-12 23:18:20
回答 3查看 4.1K关注 0票数 1

我目前正在编写代码,用于创建一个监控工具,用于监控Amazon Web Services和Amazon Cloud,并可视化我当前运行的云基础架构。

例如,如果CPU利用率或网络I/O增加了某个阈值,而不是调用自动缩放,并且向系统添加了一个新的EC2实例,则此代码运行得很好,但现在我可以在显示此活动的工具的图形用户界面上可视化此操作。我正在使用Java Swing创建监控工具。

我需要的主要帮助如下:

我在框架的顶部可视化客户端,在客户端下面可视化EC2实例,只是为了显示客户端和服务器之间的逻辑连接,我在客户端和EC2实例之间画了一条线。

现在我需要对这些线条进行动画处理--也许一条线条移动缓慢,只是为了显示客户端和EC2实例之间有一些流量,我还想让线条中的动画或笔划移动的速度随着流量的增加而增加。(可能是设置动画速度的一个变量)。

我需要关于如何在Java Swings中实现这样的动画线条的帮助。任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2012-04-12 23:38:37

这是一个移动虚线的小例子,从零开始完全绘制和动画:

代码语言:javascript
复制
private static int speed = 5;

public static void main ( String[] args )
{
    JFrame frame = new JFrame ();
    frame.setLayout ( new BorderLayout () );

    frame.add ( new JComponent ()
    {
        private int diff = 0;

        {
            final Timer timer = new Timer ( 1000 / ( 10 * speed ), null );
            timer.addActionListener ( new ActionListener ()
            {
                public void actionPerformed ( ActionEvent e )
                {
                    if ( diff < 20 )
                    {
                        diff++;
                    }
                    else
                    {
                        diff = 0;
                    }
                    repaint ();
                    timer.setDelay ( 1000 / ( 10 * speed ) );
                }
            } );
            timer.start ();
        }

        protected void paintComponent ( Graphics g )
        {
            Graphics2D g2d = ( Graphics2D ) g;
            g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON );
            g2d.setStroke (
                    new BasicStroke ( 5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1f,
                            new float[]{ 10f, 10f }, diff ) );
            g2d.setPaint ( Color.BLACK );
            g2d.drawLine ( 0, getHeight () / 2, getWidth (), getHeight () / 2 );
        }
    } );
    frame.add ( new JSlider ( JSlider.HORIZONTAL, 1, 10, speed )
    {
        {
            addChangeListener ( new ChangeListener ()
            {
                public void stateChanged ( ChangeEvent e )
                {
                    speed = getValue ();
                }
            } );
        }
    }, BorderLayout.SOUTH );
    frame.setSize ( 500, 500 );
    frame.setLocationRelativeTo ( null );
    frame.setVisible ( true );
}

基本上,对于动画,您将需要绘制大多数您想要动画的东西。在你的例子中,如果它是用虚线连接的两个对象-你可以使用容器来绘制这个连接,并只在其上放置简单的Swing组件。因此它将检测它们的边界并绘制连接线。

票数 2
EN

Stack Overflow用户

发布于 2012-04-13 04:08:49

BasicStroke设置动画。有关示例代码,请参阅this answer

票数 2
EN

Stack Overflow用户

发布于 2012-04-12 23:38:46

使用JPanel并覆盖其paintComponent() method.This方法将负责动画。

代码语言:javascript
复制
public void paintComponent(Graphics g)
 {
 super.paintComponent(g);
 g.setColor(Color.red); 
 g.drawLine(x1,y1,x2, y2); 
}

当required.In你的情况时,再次增加x2,当服务器处理新的连接时,需要增加x2。希望这能对你有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10126590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档