1

私は現在、Amazon Web Services と Amazon Cloud を監視し、現在実行中のクラウド インフラストラクチャを視覚化する監視ツールを作成するためのコードを書いています。

たとえば、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 );
}

基本的にアニメーションの場合、アニメーション化するもののほとんどをペイントする必要があります。あなたの場合、それが破線で接続された2つのオブジェクトである場合、その接続をペイントするコンテナと、その上に配置された単純な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 に答える