SWT_AWT双缓冲问题

时间:2014-08-31 17:29:12

标签: java swt eclipse-rcp swt-awt

我有一个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);

我之前在滚动面板上设置了它;但无论哪种方式都会导致同样的问题。

Broken Double Buffering

当你将鼠标移到它上面时,问题就消失了;它按预期工作。当我切换到其他部分(选项卡)并返回此选项卡时,问题再次出现。当我没有设置双缓冲时,这个问题也会消失,但这会导致滚动条发生可怕的闪烁。

有人有什么想法吗?

0 个答案:

没有答案