BorderLayoutをレイアウトマネージャとして使用するJFrameがあります。 このJFrameには、中央と南の2つのパネルもあります。 CENTERの位置にあるパネルは、一部のユーザー操作で動的に変更されます(実際には、ユーザーが下のパネルで「次へ」を押すと表示されます)。JFrameでJPanelを動的に変更する際の問題
コードがfollwingさ:
private void switchToPanelByState(State state)
{
this.getContentPane().removeAll();
JPanel panel = _panels.get(state);
this.getContentPane().add(panel, BorderLayout.CENTER);
this.getContentPane().add(_controlPanel, BorderLayout.SOUTH);
this.pack();
}
問題は、GUI要素が(前回のパネルから)「古い」の部分であるパネルのいくつかの変更後に現在のパネルに表示されていることです。随時
そしてまた、私は次の例外を参照してください。それが問題に関連していた場合、私は知りませんが
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
を。
これらの問題の原因としてはどのようなものがありますか? アドバイスをいただければ幸いです。
removeAll()メソッドが表示されるときはいつでも、あなたは[カードレイアウト](http://download.oracle.com/javase/tutorial/uiswing/layout/card.html)を使用する必要があるということに気づくでしょう。 – camickr