1

I have a main JPanel, an inner JPanel and a JScrollPane for the inner JPanel

mainPanel = new JPanel();
innerPanel = new JPanel();
scroll = new JScrollPane(innerPanel);
scroll.setPreferredSize(new Dimension(400,300));
mainPanel.add(scroll);

I'm also adding components dynamically to the inner JPanel

After I add all the components I call revalidate() and repaint() on the inner JPanel

And when I call removeAll() components from the inner JPanel I call revalidate() and repaint() again on the inner JPanel

It works fine but my confusion and question is if I should call revalidate() on the scroll as well, ie:

scroll.getViewport().revalidate(); 

Thanks for any feedback.

4

1 に答える 1

3

スイングは賢い。revalidate()変更したコンポーネントを呼び出します。

APIが言うように:

つまり、このメソッドが呼び出された後、このコンポーネントの包含階層をたどったときに見つかった最初の validateRoot (存在する場合) が検証されます。デフォルトでは、JRootPane、JScrollPane、および JTextField は isValidateRoot から true を返します。

したがって、scrollPane の revalidating() は作業を 2 回行うことになります。

パネルの代わりに scrollPane を revalidate() することもできますが、変更したばかりなのでパネルへの参照があるため、パネルを revalidate() する方が簡単です。

メソッドについて質問がある場合は、API から始めてください。不明な点がある場合は、API から参照を引用してください。サポートさせていただきます。

于 2013-06-14T02:45:54.250 に答える