1

我目前正在编写用于创建监控工具的代码,该工具可以监控亚马逊网络服务和亚马逊云,并可视化我当前运行的云基础设施。

例如,如果 CPU 利用率或网络 I/O 增加了某个阈值,而不是调用自动缩放并将 EC2 的新实例添加到系统中,则此代码运行良好,但现在我在 GUI 上可视化此东西显示此活动的工具。我正在使用 Java Swing 创建监控工具。

我需要的主要帮助如下:

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

现在我需要对这些线进行动画处理——也许一条缓慢移动的描边线只是为了表明客户端和 EC2 实例之间存在一些流量,我还希望线条中的动画或描边移动的速度随着流量的增加而增加。(可能是设置动画速度的变量)。

我需要有关如何在 Java Swings 中实现此类动画线条的帮助。非常感谢任何帮助。

4

3 回答 3

2

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

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 组件。所以它会检测它们的边界并绘制连接线......

于 2012-04-12T15:38:37.270 回答
2

动画一个BasicStroke. 有关示例代码,请参见此答案

于 2012-04-12T20:08:49.013 回答
1

使用 JPanel 并覆盖它的paintComponent()方法。这个方法将负责动画。

public void paintComponent(Graphics g)
 {
 super.paintComponent(g);
 g.setColor(Color.red); 
 g.drawLine(x1,y1,x2, y2); 
}

需要时再次增加 x2。在您的情况下,需要在服务器处理新连接时增加 x2。希望这会帮助你。

于 2012-04-12T15:38:46.220 回答