[英]How to capture mouse click events from console in eclipse plugin
我正在開發一個 eclipse 插件。 它在控制台中寫入一些行。 為了 select 在控制台中顯示一行,我試圖從該控制台捕獲鼠標雙擊事件。
控制台已按照此 eclipse FAQ實現。 MessageConsole
或IconsoleView
類似乎沒有提供使用SWT.MouseDoubleClick
事件添加偵聽器的方法。
有沒有辦法從控制台捕獲鼠標事件,然后讀取選定的行?
MessageConsole
對數據的顯示方式一無所知,它是處理該數據的TextConsoleViewer
。
要訪問控制台查看器,您需要使用自定義消息控制台 - 擴展MessageConsole
或TextConsole
並覆蓋createPage
以創建您自己的擴展TextConsolePage
的控制台頁面。
控制台頁面需要覆蓋createViewer
方法來創建您自己的擴展TextConsoleViewer
的文本控制台查看器。
在查看器中,您可以覆蓋mouseDoubleClick
方法以接收雙擊。
有關示例,請參見 Eclipse JDT JavaStackTraceConsole
、 JavaStackTraceConsolePage
和JavaStackTraceConsoleViewer
類。
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.