1

JPanel実行時にビッグJPanelFlowLayoutレイアウトマネージャーがある)に30秒を追加する必要があります。すべてが追加されたときに最後に追加されたパネルを表示したいので、最後に追加されreValidate();rePaint();各パネルが大きなパネルに表示されるので、自動的に再描画されるようです。

public class CalendarsManager implements Runnable
{

    public CalendarsManager(int mode, DecorateCalendarContainer container)
    {
        status = mode;
        containerPanel = container.getContainer();
        dayPanelsCategory = container.getDayPanels();
    }
    public void run()
    {
        for(int i=1;i<=30;i++)
        {
            containerPanel .add(dayPanelsCategory);
        }
        containerPanel.revalidate();
        containerPanel.repaint();
    }
}
4

1 に答える 1

3

SwingコンポーネントをEDT(イベントディスパッチスレッド)からのみ変更します。他のスレッドからコンポーネントを追加/削除すると、未定義の動作が発生し、競合状態を追跡するのが非常に困難になる可能性があります。

SwingUtilities.invokeLater()/ invokeAndWait()のような呼び出しを使用して、EDTのGUIを変更するコードを実行する必要があります。ペイントに関しては、これにより、呼び出されたコードもアトミックになります(EDTはGUIをペイントします。これは、変更するコードの実行でビジー状態になっている間は、同時に再ペイントできないためです)。

于 2013-02-18T15:51:23.200 に答える