ウィンドウを手動でドラッグすると JComponent が更新されるのに、repaint または revalidate を呼び出しても更新されない理由を理解しようとしています。データを表示する準備ができましたが、手動でサイズを変更するまで表示されません。再描画と再検証を試みたので、誰かが私にできることについていくつかの提案をすることができますか、それとも Swing の問題ではないように聞こえますか?
私が気付いた奇妙なことの1つは、次のコードがある場合です。
sp.setSize(sp.getSize().width, sp.getSize().height+1);
sp.setSize(sp.getSize().width, sp.getSize().height-1);
最初の行が使用されている場合、JComponent はそれ自体を更新します。これらの行をまったく使用しないか、両方とも使用しないと、奇妙に思えます。
私は基本的に、JDesktopPane の JInternalFrame に JPanel を入れています。私がやろうとしていることには2つの主な機能があります。1 つは新しい JPanel を追加し、もう 1 つはそれを更新しようとするため、新しいデータが表示されます。
public void addNewSP()
{
sp = new JInternalFrame("SP");
sp.setClosable(true);
sp.setLocation(700, 400); //this should be changed to something based on screen size
sp.setResizable(true);
sp.add(popUp);
this.parentContainer.add(sp, JLayeredPane.DRAG_LAYER);
sp.pack();
sp.show();
sp.setSize(500, 500);
sp.setPreferredSize(new Dimension(500, 500));
}
public void refreshSP()
{
sp.repaint();
sp.validate();
sp.repaint();
sp.validate();
parentContainer.validate();
parentContainer.repaint();
sp.setSize(sp.getSize().width, sp.getSize().height+1);
sp.setSize(sp.getSize().width, sp.getSize().height-1);
}
}
ところで、parentContainer は JDesktopPane です