我有一个 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);
在此之前,我将它设置在滚动面板上;但无论哪种方式,两者都会导致相同的问题。
但是,当您将鼠标移到它上面时,问题就消失了;它按预期工作。当我切换到其他部分(选项卡)并返回此选项卡时,问题再次出现。当我不设置双缓冲时,这个问题也会消失,但这会导致滚动条可怕地闪烁。
有人有想法么?