java iconsolefactory_java – 如何设置IOConsole的Caret
我正在寫一個eclipse-plugin,它創建了一個新的Console.請參閱我的源代碼:
CliConsoleFactory.java
import java.io.IOException;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.IConsoleFactory;
import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.console.IOConsoleOutputStream;
public class CliConsoleFactory implements IConsoleFactory {
private static final String ENTER_KEY = "\r\n";
private static final String CLI_PROMPT = "CLI> ";
private IConsoleView m_consoleView = null;
@Override
public void openConsole() {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
m_consoleView = (IConsoleView) page.showView(IConsoleConstants.ID_CONSOLE_VIEW);
} catch (PartInitException e1) {
e1.printStackTrace();
}
if (m_consoleView == null) {
return;
}
final MyIOConsole myConsole = new MyIOConsole("CLI", null);
final IDocument document = myConsole.getDocument();
document.addDocumentListener(new IDocumentListener() {
@Override
public void documentChanged(DocumentEvent event) {
if (ENTER_KEY.equals(event.getText())) {
// Print the Prompt
writeToConsole(myConsole, CLI_PROMPT);
}
}
@Override
public void documentAboutToBeChanged(DocumentEvent event) {
}
});
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] { myConsole });
m_consoleView.display(myConsole);
writeToConsole(myConsole, CLI_PROMPT);
}
private void writeToConsole(final MyIOConsole myConsole, String msg) {
IOConsoleOutputStream stream = myConsole.newOutputStream();
stream.setActivateOnWrite(true);
try {
stream.write(msg);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
MyIOConsole.java
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.console.IOConsole;
public class MyIOConsole extends IOConsole {
public MyIOConsole(String name, ImageDescriptor imageDescriptor) {
super(name, imageDescriptor);
}
}
它很棒.當我進入一個新行時,提示符為“CLI>”,但是Caret位置不合適,它位于該行的第一個位置而不是最后一個位置.我想讓Caret搬到最后一個位置.誰知道請幫幫我.!!!
解決方法:
要訪問插入符號位置,您需要實現一個控制臺查看器.
這是我自定義控制臺的設置,
public class MyConsole extends IOConsole
{
....
@Override
public IPageBookViewPage createPage(IConsoleView view) {
return new MyConsolePage(this, view);
}
}
public class MyConsolePage extends TextConsolePage
{
....
@Override
protected TextConsoleViewer createViewer(Composite parent) {
return new MyConsoleViewer(parent, (MyConsole) this.getConsole());
}
}
public class MyConsoleViewer extends TextConsoleViewer
{
//This class gives you access to setting the caret position
//by getting the styled text widget and then using setCaretOffset
}
根據您覆蓋的方法,有多種方法可以獲取樣式化文本窗口小部件.我還創建了自己的控制臺歷史記錄類,它跟蹤插入符號偏移量,因為我需要使用向上和向下箭頭鍵來瀏覽先前輸入的命令的附加功能.
實現MyConsoleViewer的最佳方法是使用Eclipse的龐大源代碼來設置一個完美的例子.我幾乎重用了所有這個類org.eclipse.ui.internal.console.IOConsoleViewer.它甚至顯示了設置插入符的示例.
希望這仍然有助于你的問題不久前.
標簽:rcp,java,console,eclipse-plugin,eclipse-rcp
來源: https://codeday.me/bug/20191002/1841670.html
總結
以上是生活随笔為你收集整理的java iconsolefactory_java – 如何设置IOConsole的Caret的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codeigniter mysql er
- 下一篇: idea 执行 java jar_使用