1

JavaGUIプログラムを作りたい。大きなjPanelを含むjScrollpaneが含まれています。jPanel自体には、jButtons、jPanelsなどのSwingコンポーネントが多数含まれています。ユーザーがjButtonをクリックすると、jScrollpaneが一定の速度で大きなパネルの最後までスクロールし始めます。アンドロイドOSのようなもの。この問題を解決するには、Javaでアニメーションを作成する方法を知っている必要があるので、スレッドで簡単に解決しようとしましたが、それは不可能であり、スイングにはスレッドのより具体的な使用が必要なようです...アイデア?それはSwingworkerに関連していますか?本当に本当に重要です...:(

更新:私はタイマークラスでそれを解決しようとしました:

       ActionListener action = new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            if (mainContainerScrollPane.getHorizontalScrollBar().getValue() == mainContainerScrollPane.getHorizontalScrollBar().getMaximum())
                timer.stop();
            mainContainerScrollPane.getHorizontalScrollBar().setValue(mainContainerScrollPane.getHorizontalScrollBar().getValue() + 5);
            mainContainerScrollPane.repaint();
        }
    };

    timer = new Timer(10, action);
    timer.start();

現在の問題は、アニメーションがスムーズに行われないことです。スムーズにスクロールしますが、特定の場所に到達すると速度が低下します。なぜ?

4

1 に答える 1

3

一般に、GUI コンポーネントを変更するイベントは、イベント ディスパッチ スレッド (EDT) で実行する必要があります。このチュートリアルで説明されているように、swingTimerを使用して EDT で繰り返しイベントを発生させることができます。http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html . タイマー イベントでは、スクロールバーの値を新しい位置にインクリメントできます。これを同じ増分で繰り返して、探している効果を取得します。

于 2013-01-05T21:01:02.413 に答える