Eclipse RCP (SWT) プラグイン プロジェクトがあり、次のコードを使用して JTree/JScrollPane/Etc を含む SWT_AWT フレームを持つビュー パーツがあります。
@PostConstruct
public void postConstruct(Composite parent) {
parent.setLayout(new FillLayout(SWT.HORIZONTAL));
Composite comp = new Composite(parent, SWT.EMBEDDED);
comp.setLayout(new FillLayout(SWT.HORIZONTAL));
Frame frame = SWT_AWT.new_Frame(comp);
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
}
JPanel panel = new JPanel(new BorderLayout());
frame.add(panel);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
for (int i = 0; i < 100; i++) {
DefaultMutableTreeNode obj = new DefaultMutableTreeNode("Test " + i);
root.add(obj);
for (int f = 0; f < 100; f++) {
obj.add(new DefaultMutableTreeNode("Test " + i));
}
}
JTree fileTable = new JTree(root);
fileTable.setRootVisible(false);
JScrollPane scrollPane = new JScrollPane(fileTable);
scrollPane.getHorizontalScrollBar().setDoubleBuffered(true);
scrollPane.getVerticalScrollBar().setDoubleBuffered(true);
panel.add(scrollPane);
frame.add(scrollPane);
}
ダブルバッファリングのコードを追加すると; JScrollPanel の ScrollBars に明示的に設定して、問題を解決できるかどうかを確認しました。
scrollPane.getHorizontalScrollBar().setDoubleBuffered(true);
scrollPane.getVerticalScrollBar().setDoubleBuffered(true);
この前にスクロールパネルに設定しました。しかし、いずれにせよ、両方とも同じ問題を引き起こします。
マウスをその上に移動すると、問題はなくなります。期待どおりに動作します。他の部分 (タブ) に切り替えてこのタブに戻ると、問題が再び発生します。この問題は、ダブル バッファリングを設定しない場合にも解消されますが、スクロール バーのちらつきがひどくなります。
誰にもアイデアはありますか?