一 高亮的内容:需要高亮的内容有: 关键字, 如 public, int, true 等 运算符, 如 +, -, *, /等 数字 高亮字符串, 如 "example of string" 高亮单行注释 高亮多行注释二 实现高亮的核心方法:StyledDsetCharacterAttributes(int offset, int length, AttributeSet s, boolean replace) 三 文本编辑器选择Java中提供的多行文本编辑器有: JTextComponent, JTextArea, JTextPane, JEditorPane等, 都可以使用 但是因为语法着色中文本要使用多种风格的样式, 所以这些文本编辑器的document要使用StyledD JTextArea使用的是PlainDocument, 此document不能进行多种格式的着色JTextPane, JEditorPane使用的是StyledDocument, 默认就可以使用 为了实现语法着色, 可以继承自DefaultStyledDocument, 设置其为这些文本编辑器的documet, 或者也可以直接使用JTextPane, JEditorPane来做 为了方便, 这里就直接使用JTextPane了四 何时进行着色当文本编辑器中有字符被插入或者删除时, 文本的内容就发生了变化, 这时检查, 进行着色为了监视到文本的内容发生了变化, 要给document添加一个DocumentListener监听器, 在他的removeUpdate和insertUpdate中进行着色处理而changedUpdate方法在文本的属性例如前景色, 背景色, 字体等风格改变时才会被调用 @Override public void changedUpdate(DocumentEvent e) { } @Override public void insertUpdate(DocumentEvent e) { try { colouring((StyledDocument) Document(), Offset(), Length()); } catch (BadLocationException e1) { printStackTrace(); } } @Override public void removeUpdate(DocumentEvent e) { try { // 因为删除后光标紧接着影响的单词两边, 所以长度就不需要了 colouring((StyledDocument) Document(), Offset(), 0); } catch (BadLocationException e1) { printStackTrace(); } }五 着色范围: pos: 指变化前光标的位置len: 指变化的字符数例如有关键字public, int单词"publicint", 在"public"和"int"中插入一个空格后变成"public int", 一个单词变成了两个, 这时对"public" 和 "int"进行着色着色范围是public中p的位置和int中t的位置加1, 即是pos前面单词开始的下标和pos+len开始单词结束的下标 所以上例中要着色的范围是"public int" 提供了方法indexOfWordStart来取得pos前单词开始的下标, 方法indexOfWordEnd来取得pos后单词结束的下标 public int indexOfWordStart(Document doc, int pos) throws BadLocationException { // 从pos开始向前找到第一个非单词字符 for (; pos > 0 && isWordCharacter(doc, pos - 1); --pos); return pos; } public int indexOfWordEnd(Document doc, int pos) throws BadLocationException { // 从pos开始向前找到第一个非单词字符 for (; isWordCharacter(doc, pos); ++pos); return pos; }一个字符是单词的有效字符: 是字母, 数字, 下划线 public boolean isWordCharacter(Document doc, int pos) throws BadLocationException { char ch = getCharAt(doc, pos); // 取得在文档中pos位置处的字符 if (CisLetter(ch) || CisDigit(ch) || ch == '_') return false; }所以着色的范围是[start, end] : int start = indexOfWordStart(doc, pos); int end = indexOfWordEnd(doc, pos + len);六 关键字着色从着色范围的开始下标起进行判断, 如果是以字母开或者下划线开头, 则说明是单词, 那么先取得这个单词, 如果这个单词是关键字, 就进行关键字着色, 如果不是, 就进行普通的着色 着色完这个单词后, 继续后面的着色处理 已经着色过的字符, 就不再进行着色了 public void colouring(StyledDocument doc, int pos, int len) throws BadLocationException { // 取得插入或者删除后影响到的单词 // 例如"public"在b后插入一个空格, 就变成了:"pub lic", 这时就有两个单词要处理:"pub"和"lic" // 这时要取得的范围是pub中p前面的位置和lic中c后面的位置 int start = indexOfWordStart(doc, pos); int end = indexOfWordEnd(doc, pos + len); char ch; while (start < end) { ch = getCharAt(doc, start); if (CisLetter(ch) || ch == '_') { // 如果是以字母或者下划线开头, 说明是单词 // pos为处理后的最后一个下标 start = colouringWord(doc, start); } else { //SwingUinvokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle)); ++start; } } }public int colouringWord(StyledDocument doc, int pos) throws BadLocationException { int wordEnd = indexOfWordEnd(doc, pos); String word = Text(pos, wordEnd - pos); // 要进行着色的单词 if (ains(word)) { // 如果是关键字, 就进行关键字的着色, 否则使用普通的着色 // 这里有一点要注意, 在insertUpdate和removeUpdate的方法调用的过程中, 不能修改doc的属性 // 但我们又要达到能够修改doc的属性, 所以把此任务放到这个方法的外面去执行 // 实现这一目的, 可以使用新线程, 但放到swing的事件队列里去处理更轻便一点 SwingUinvokeLater(new ColouringTask(doc, pos, wordEnd - pos, keywordStyle)); } else { SwingUinvokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle)); } return wordEnd; }因为在insertUpdate和removeUpdate方法中不能修改document的属性, 所以着色的任务放到这两个方法外面, 所以使用了SwingUinvokeLater来实现 private class ColouringTask implements Runnable { private StyledDocument doc; private Style style; private int pos; private int len; public ColouringTask(StyledDocument doc, int pos, int len, Style style) { doc = doc; pos = pos; len = len; style = style; } public void run() { try { // 这里就是对字符进行着色 setCharacterAttributes(pos, len, style, true); } catch (Exception e) {} } }七: 源码关键字着色的完成代码如下, 可以直接编译运行 对于数字, 运算符, 字符串等的着色处理在以后的教程中会继续进行详解import Color;import HashSet;import Set;import JFrame;import JTextPane;import SwingUtilities;import DocumentEvent;import DocumentListener;import BadLocationException;import Document;import Style;import StyleConstants;import StyledDocument;public class HighlightKeywordsDemo { public static void main(String[] args) { JFrame frame = new JFrame(); JTextPane editor = new JTextPane(); Document()addDocumentListener(new SyntaxHighlighter(editor)); ContentPane()add(editor); setDefaultCloseOperation(JFEXIT_ON_CLOSE); setSize(500, 500); setVisible(true); }}/** * 当文本输入区的有字符插入或者删除时, 进行高亮 * * 要进行语法高亮, 文本输入组件的document要是styled document才行 所以不要用JTextA 可以使用JTextP * * @author Biao * */class SyntaxHighlighter implements DocumentListener { private Set
import *; import *; import *; import *; import *; //Date needed import PrintWriter; public class NotePad extends JFrame { JTextArea jta; class newl implements ActionListener { public void actionPerformed(ActionEvent e) { setText(""); } } class openl implements ActionListener { public void actionPerformed(ActionEvent e) { JFileChooser jf=new JFileChooser(); showOpenDialog(NotePhis); } } //保存文件的监听 class savel implements ActionListener { public void actionPerformed(ActionEvent e) { JFileChooser jf = new JFileChooser(); 写不了那么多啊 详细看这里把
用的流,,,代码百度下一个就好了,网上很多的!
如果你想做记事本,在NetBean里面有例子的。直接生成就行了。
1、打开源码编辑器。可以直接上传代码片段生成图片,支持所有的编程语言和代码风格,背景色可以自定义,效果实时显示,非常方便。2、需要保存图片的话,直接点击右上角的Export按钮就行,目前官方支持2种格式的图片,一种是PNG,一种是SVG,输入文件名后,直接就可以保存。以上是源码编辑器游戏怎么做图片的操作方法。
Linux程序员经常抱怨,自从他们使用了免费开源的系统平台后,作为一名程序员,却并没有在代码编辑器上得到足够的重视。他们往往会认为Linux平台上的代码编辑器太少了,以至于影响他们的编程工作。但是事实并非如此,在Linux平台上有太多的代码编辑器供你使用了,下面我们分享了7个最受Linux程序员欢迎的代码编辑器,继续在编程的路上前行吧! 1、Eclipse Eclipse是一款很酷的开源代码编辑器,同时它也是最受程序员亲睐的代码编辑器之一,它拥有代码高亮和智能提示等强大的功能。在Eclipse中,你可以完全胜任以下编程语言的工作——Python, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等,它也是非常著名的Java集成开发环境,甚至提供了对Java 8的支持。在一些Web开发IDE特性的帮助下,你可以非常方便地对代码文件进行组织和访问 2、Light Table Light Table将会是一款彻底改变Linux编辑器概念的代码编辑器,它提供了直观和易用的编程界面。并且Light Table可以很方便地进行定制功能,因为它也是开源的。它有一个强大的插件管理器,这样你就不用在网上漫无目的的寻找需要的插件了。 3、Sublime Text 3 这是一款绝对值得一提的Linux代码编辑器,因为它有简单而且超酷的功能特性。Sublime Text 3最独特的地方就是它没有独特的功能,它仅仅是一个简单的代码编辑器,有了它,你就可以非常方便地对多行代码进行修改了。利用Sublime Text 3你可以做操作文件、重命名变量、分离编辑和其他有趣的操作。 4、Brackets Brackets也是一款为Linux开发者设计的开源代码编辑器,使用Brackets写代码,你不会被任何事情所打断。比如在写HTML代码时,即便你没有保存代码也可以及时预览你的Web页面效果。你也可以使用Theseus来检查变量,Brackets默认提供一种主题,当然你也可以在扩展中心获取更多的主题。 5、Dart Editor Dart Editor是Google开发设计的,旨在帮助开发者制作光亮而惊叹的Web应用。Dart Editor支持多种开发语言,同时也集成了Dartium。通过它的静态分析引擎,你可以创建,维护,调试和开发自己的Web应用。函数、类、方法等都能以树的结构列出来,方便你编写代码。 6、Vim Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 7、Emacs Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。Emacs不仅可以作为文本编辑器,还可以用来收发电子邮件、通过FTP/TRAMP编辑远程档案、通过Telnet登录主机、上新闻组、登陆IRC和朋友交流、查看日历等功能。
最轻量级的文本编辑器应该是系统自带的。但功能简陋些
一个小的文本编辑器:import ActionListener;import EventListener;import *;import *;import *;import *;import *;import *;public class MiniEdit extends JFrame implements ActionListener { /** * Method main * * * @param args * */ MenuBar menuBar = new MenuBar(); Menu file = new Menu("File"), edit = new Menu("Edit"), help = new Menu("Help"); MenuItem[] menuItem ={ new MenuItem("New"), new MenuItem("Open"), new MenuItem("Save"), new MenuItem("Exit"), new MenuItem("Select All"), new MenuItem("Copy"), new MenuItem("Cut"), new MenuItem("Paste"), new MenuItem("Help") }; TextArea textArea = new TextArea(); String fileName = "NoName"; Toolkit toolKit = TDefaultToolkit(); Clipboard clipboard = toolKSystemClipboard(); //opne and close message dialogs private FileDialog openFileDialog = new FileDialog(this,"Open File",FileDLOAD); private FileDialog saveFileDialog = new FileDialog(this,"Save File",FileDSAVE); public static void main(String[] args) { // TODO: Add your code here MiniEdit MyEdit = new MiniEdit(); MyEshow(); } /** * Method MiniEdit * * */ public MiniEdit() { // TODO: Add your code here setTitle("MiniEdit"); setFont(new Font("Times New Roman",FPLAIN,15)); setBackground(Cblue); setSize(500,500); setMenuBar(menuBar); menuBadd(file); menuBadd(edit); menuBadd(help); for(int i=0;i<4;i++) { add(menuItem[i]); add(menuItem[i+4]); } add(menuItem[8]); add(textArea); addWindowListener(new WindowAdapter(){//关闭窗口的事件监听 public void windowClosing(WindowEvent e){ Window()dispose(); Sxit(0); } }); //add actionListener for(int i=0;i 我曾经在资源吧看到过,你去找找吧,肯定有。 akelpad 是一款快捷免费且文件小巧的文本编辑软件。具有单窗口单页面和单窗口多页面两种模式,可编辑超过64k限制的文件。支持unicode 字符。支持系统已安装的任意代码页,可预览打开的文件,多次撤消,记忆搜索替换设置,支持插件等功能。是一款不错的“记事本”替代工具。 AndroidStudio亲儿子最好用。如果只是编辑器,notepad++就行了。只是没有代码提示补全。 系统默认的头像是没法修改的。除非是修改ROM里的系统文件,但是这样的话危险性太大。有些Android论坛会有美化版ROM发布。 一个小的文本编辑器:import ActionListener;import EventListener;import *;import *;import *;import *;import *;import *;public class MiniEdit extends JFrame implements ActionListener { /** * Method main * * * @param args * */ MenuBar menuBar = new MenuBar(); Menu file = new Menu("File"), edit = new Menu("Edit"), help = new Menu("Help"); MenuItem[] menuItem ={ new MenuItem("New"), new MenuItem("Open"), new MenuItem("Save"), new MenuItem("Exit"), new MenuItem("Select All"), new MenuItem("Copy"), new MenuItem("Cut"), new MenuItem("Paste"), new MenuItem("Help") }; TextArea textArea = new TextArea(); String fileName = "NoName"; Toolkit toolKit = TDefaultToolkit(); Clipboard clipboard = toolKSystemClipboard(); //opne and close message dialogs private FileDialog openFileDialog = new FileDialog(this,"Open File",FileDLOAD); private FileDialog saveFileDialog = new FileDialog(this,"Save File",FileDSAVE); public static void main(String[] args) { // TODO: Add your code here MiniEdit MyEdit = new MiniEdit(); MyEshow(); } /** * Method MiniEdit * * */ public MiniEdit() { // TODO: Add your code here setTitle("MiniEdit"); setFont(new Font("Times New Roman",FPLAIN,15)); setBackground(Cblue); setSize(500,500); setMenuBar(menuBar); menuBadd(file); menuBadd(edit); menuBadd(help); for(int i=0;i<4;i++) { add(menuItem[i]); add(menuItem[i+4]); } add(menuItem[8]); add(textArea); addWindowListener(new WindowAdapter(){//关闭窗口的事件监听 public void windowClosing(WindowEvent e){ Window()dispose(); Sxit(0); } }); //add actionListener for(int i=0;i JDK自带一个简单的Notepad,你可以研究一下他的源代码。在%JAVA_HOME%\demo\jfc\Notepad 目录下JDK自带一个稍复杂的Stylepad,你可以研究一下他的源代码。在%JAVA_HOME%\demo\jfc\Stylepad目录下 如果你想做记事本,在NetBean里面有例子的。直接生成就行了。android代码编辑器源码
简单文本编辑器源代码java