使用JxBrowser HEAVYWEIGHT时,Swing的拖放操作被禁用

时间:2019-03-27 09:04:57

标签: java linux swing jtabbedpane jxbrowser

我正在尝试拖放以在Linux中与JxBrowser一起使用。我希望在一个选项卡中能够拖放我的swing组件,在另一个选项卡中具有jxbrowser。但是,将jxbrowser添加到另一个选项卡时,拖放操作将停止。

当尝试在“文本”选项卡中拖动标签时,此代码重现了该问题:

public class TabbedPaneSample {
   public static void main(String[] args) {
        Browser browser = new Browser(BrowserType.HEAVYWEIGHT);

        JLabel label = new JLabel("Label Text");
        label.setTransferHandler(new TransferHandler("text"));
        label.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                JComponent comp = (JComponent) evt.getSource();
                TransferHandler th = comp.getTransferHandler();
                th.exportAsDrag(comp, evt, TransferHandler.COPY);
            }
        });

        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.addTab("Browser", new BrowserView(browser));
        tabbedPane.addTab("Text", label);

        JFrame frame = new JFrame();
        frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        browser.loadURL("https://www.google.com");
    }
}

BrowserType.HEAVYWEIGHT更改为BrowserType.LIGHTWEIGHT即可。

我可以以某种方式解决此问题吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,目前,在JxBrowser的重量级模式下,拖放操作在Linux上不起作用。关于这一点,我们已经有一个悬而未决的任务,并将在未来的JxBrowser版本之一中实现此功能。

目前,作为一种解决方法,我建议您尝试使用轻量级模式,因为拖放操作应该在Linux上以这种模式工作。

至于轻量级模式要比重量级模式慢,也许您可​​以尝试一种加速的轻量级模式,速度要快约30%:https://jxbrowser.support.teamdev.com/support/solutions/articles/9000104965-accelerated-lightweight-rendering