日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java iconsolefactory_java – 如何设置IOConsole的Caret

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。