簡體   English   中英

如何在 eclipse 插件中從控制台捕獲鼠標單擊事件

[英]How to capture mouse click events from console in eclipse plugin

我正在開發一個 eclipse 插件。 它在控制台中寫入一些行。 為了 select 在控制台中顯示一行,我試圖從該控制台捕獲鼠標雙擊事件。

控制台已按照此 eclipse FAQ實現。 MessageConsoleIconsoleView類似乎沒有提供使用SWT.MouseDoubleClick事件添加偵聽器的方法。

有沒有辦法從控制台捕獲鼠標事件,然后讀取選定的行?

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 {
  ...
}

謝謝,它工作正常。 我只需要以另一種方式管理鼠標事件,因為覆蓋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!");
        }
        
        
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM