【问题标题】:How to capture mouse click events from console in eclipse plugin如何在 Eclipse 插件中从控制台捕获鼠标单击事件
【发布时间】:2020-08-18 08:35:50
【问题描述】:

我正在开发一个 Eclipse 插件。它在控制台中写入一些行。为了选择控制台中显示的一行,我试图从该控制台捕获鼠标双击事件。

控制台已经按照这个eclipseFAQ实现了。 MessageConsoleIconsoleView 类似乎没有提供使用 SWT.MouseDoubleClick 事件添加侦听器的方法。

有没有办法从控制台捕获鼠标事件,然后读取选定的行?

【问题讨论】:

  • 您真的需要控制台吗?对于包含 StyledText 控件之类的普通视图,这要容易得多。

标签: eclipse events console eclipse-plugin mouse


【解决方案1】:

MessageConsole 对数据的显示方式一无所知,而是由 TextConsoleViewer 处理。

要访问控制台查看器,您需要使用自定义消息控制台 - 扩展 MessageConsoleTextConsole 并覆盖 createPage 以创建您自己的扩展 TextConsolePage 的控制台页面。

控制台页面需要覆盖createViewer 方法来创建您自己的扩展TextConsoleViewer 的文本控制台查看器。

在查看器中,您可以覆盖mouseDoubleClick 方法以接收双击。

有关示例,请参阅 Eclipse JDT JavaStackTraceConsoleJavaStackTraceConsolePageJavaStackTraceConsoleViewer 类。

public class JavaStackTraceConsole extends TextConsole {

    ...

    @Override
    public IPageBookViewPage createPage(IConsoleView view) {
        return new JavaStackTraceConsolePage(this, view);
    }
}
public class JavaStackTraceConsolePage extends TextConsolePage {
   
    ...

    @Override
    protected TextConsoleViewer createViewer(Composite parent) {
        return new JavaStackTraceConsoleViewer(parent, (JavaStackTraceConsole) getConsole());
    }
}
public class JavaStackTraceConsoleViewer extends TextConsoleViewer {
  ...
}

【讨论】:

    【解决方案2】:

    谢谢你,它工作正常。我只需要以另一种方式管理鼠标事件,因为覆盖 mouseDoubleClick 方法不起作用。这是我的代码:

        public class MyTextConsoleViewer extends TextConsoleViewer {
        
        
            public MyTextConsoleViewer(Composite parent, MyMessageConsole console) {
                super(parent, console);
                StyledText styledText = getTextWidget();
                MouseListener listener = new MouseListener() {
                    
                    @Override
                    public void mouseUp(MouseEvent arg0) {
                        // TODO Auto-generated method stub
                        
                    }
                    
                    @Override
                    public void mouseDown(MouseEvent arg0) {
                        // TODO Auto-generated method stub
                        
                    }
                    
                    @Override
                    public void mouseDoubleClick(MouseEvent event) {
                        // TODO Auto-generated method stub
                        IDocument document = console.getDocument();
                        try {
                            int currentLine = document.getLineOfOffset(styledText.getOffsetAtLocation(new Point (event.x, event.y)));
                            IRegion lineInfo = document.getLineInformation(currentLine);
                            System.out.println(document.get(lineInfo.getOffset(), lineInfo.getLength()));
                        } catch (BadLocationException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                };
                styledText.addMouseListener(listener );
                
                
                // TODO Auto-generated constructor stub
            }
        
            public MyTextConsoleViewer(Composite parent, TextConsole console,
                    IScrollLockStateProvider scrollLockStateProvider) {
                super(parent, console, scrollLockStateProvider);
                // TODO Auto-generated constructor stub
            }
        
            
            @Override
            public void mouseDoubleClick(MouseEvent e) {
                System.out.println("This even doesn't work!");
            }
            
            
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      相关资源
      最近更新 更多