根据以下的设计要求编写源代码。java


一、根据以下的设计要求编写源代码。java

class Student{ private String name; private int age; public Student(){ this.name = "nobody"; this.age =20; } public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public boolean isSameAge(Student s){ return age == s.age; } }

二、根据以下的设计要求编写源代码。java

class Student{
private String name;
private int age;
public Student(){
***.name = "nobody";
this.age =20;
}

public void setName(String name){
***.name = name;
}
public Strine(){
return name;
}
public void setAge(i
this.age = a
}
public int getAge(){
return age;
}
public boolean isStudent s){
return age == s.age;
}
}

三、根据以下的设计要求编写源代码.java

一. 高亮的内容: 需要高亮的内容有: 1. 关键字, 如 public, int, true 等. 2. 运算符, 如 +, -, *, /等 3. 数字 4. 高亮字符串, 如 "example of string" 5. 高亮单行注释 6. 高亮多行注释 二. 实现高亮的核心方法: styleddocument.setcharacterattributes(int offset, int length, attributeset s, boolean replace) 三. 文本编辑器选择. java中提供的多行文本编辑器有: jtextcomponent, jtextarea, jtextpane, jeditorpane等, 都可以使用. 但是因为语法着色中文本要使用多种风格的样式, 所以这些文本编辑器的document要使用styleddocument. 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) e.getdocument(), e.getoffset(), e.getlength()); } catch (badlocationexception e1) { e1.printstacktrace(); } } @override public void removeupdate(documentevent e) { try { // 因为删除后光标紧接着影响的单词两边, 所以长度就不需要了 colouring((styleddocument) e.getdocument(), e.getoffset(), 0); } catch (badlocationexception e1) { 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 (character.isletter(ch) || character.isdigit(ch) || ch == '_') { return true; } 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 (character.isletter(ch) || ch == '_') { // 如果是以字母或者下划线开头, 说明是单词 // pos为处理后的最后一个下标 start = colouringword(doc, start); } else { //swingutilities.invokelater(new colouringtask(doc, pos, wordend - pos, normalstyle)); ++start; } } } public int colouringword(styleddocument doc, int pos) throws badlocationexception { int wordend = indexofwordend(doc, pos); string word = doc.gettext(pos, wordend - pos); // 要进行着色的单词 if (keywords.contains(word)) { // 如果是关键字, 就进行关键字的着色, 否则使用普通的着色. // 这里有一点要注意, 在insertupdate和removeupdate的方法调用的过程中, 不能修改doc的属性. // 但我们又要达到能够修改doc的属性, 所以把此任务放到这个方法的外面去执行. // 实现这一目的, 可以使用新线程, 但放到swing的事件队列里去处理更轻便一点. swingutilities.invokelater(new colouringtask(doc, pos, wordend - pos, keywordstyle)); } else { swingutilities.invokelater(new colouringtask(doc, pos, wordend - pos, normalstyle)); } return wordend; } 因为在insertupdate和removeupdate方法中不能修改document的属性, 所以着色的任务放到这两个方法外面, 所以使用了swingutilities.invokelater来实现. 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) { this.doc = doc; this.pos = pos; this.len = len; this.style = style; } public void run() { try { // 这里就是对字符进行着色 doc.setcharacterattributes(pos, len, style, true); } catch (exception e) {} } } 七: 源码 关键字着色的完成代码如下, 可以直接编译运行. 对于数字, 运算符, 字符串等的着色处理在以后的教程中会继续进行详解. import java.awt.color; import java.util.hashset; import java.util.set; import javax.swing.jframe; import javax.swing.jtextpane; import javax.swing.swingutilities; import javax.swing.event.documentevent; import javax.swing.event.documentlistener; import javax.swing.text.badlocationexception; import javax.swing.text.document; import javax.swing.text.style; import javax.swing.text.styleconstants; import javax.swing.text.styleddocument; public class highlightkeywordsdemo { public static void main(string[] args) { jframe frame = new jframe(); jtextpane editor = new jtextpane(); editor.getdocument().adddocumentlistener(new syntaxhighlighter(editor)); frame.getcontentpane().add(editor); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setsize(500, 500); frame.setvisible(true); } } /** * 当文本输入区的有字符插入或者删除时, 进行高亮. * * 要进行语法高亮, 文本输入组件的document要是styled document才行. 所以不要用jtextarea. 可以使用jtextpane. * * @author biao * */ class syntaxhighlighter implements documentlistener { private setkeywords; private style keywordstyle; private style normalstyle; public syntaxhighlighter(jtextpane editor) { // 准备着色使用的样式 keywordstyle = ((styleddocument) editor.getdocument()).addstyle("keyword_style", null); normalstyle = ((styleddocument) editor.getdocument()).addstyle("keyword_style", null); styleconstants.setforeground(keywordstyle, color.red); styleconstants.setforeground(normalstyle, color.black); // 准备关键字 keywords = new hashset(); keywords.add("public"); keywords.add("protected"); keywords.add("private"); keywords.add("_int9"); keywords.add("float"); keywords.add("double"); } 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 (character.isletter(ch) || ch == '_') { // 如果是以字母或者下划线开头, 说明是单词 // pos为处理后的最后一个下标 start = colouringword(doc, start); } else { swingutilities.invokelater(new colouringtask(doc, start, 1, normalstyle)); ++start; } } } /** * 对单词进行着色, 并返回单词结束的下标. * * @param doc * @param pos * @return * @throws badlocationexception */ public int colouringword(styleddocument doc, int pos) throws badlocationexception { int wordend = indexofwordend(doc, pos); string word = doc.gettext(pos, wordend - pos); if (keywords.contains(word)) { // 如果是关键字, 就进行关键字的着色, 否则使用普通的着色. // 这里有一点要注意, 在insertupdate和removeupdate的方法调用的过程中, 不能修改doc的属性. // 但我们又要达到能够修改doc的属性, 所以把此任务放到这个方法的外面去执行. // 实现这一目的, 可以使用新线程, 但放到swing的事件队列里去处理更轻便一点. swingutilities.invokelater(new colouringtask(doc, pos, wordend - pos, keywordstyle)); } else { swingutilities.invokelater(new colouringtask(doc, pos, wordend - pos, normalstyle)); } return wordend; } /** * 取得在文档中下标在pos处的字符. * * 如果pos为doc.getlength(), 返回的是一个文档的结束符, 不会抛出异常. 如果pos<0, 则会抛出异常. * 所以pos的有效值是[0, doc.getlength()] * * @param doc * @param pos * @return * @throws badlocationexception */ public char getcharat(document doc, int pos) throws badlocationexception { return doc.gettext(pos, 1).charat(0); } /** * 取得下标为pos时, 它所在的单词开始的下标. a±wor^da± (^表示pos, a±表示开始或结束的下标) * * @param doc * @param pos * @return * @throws badlocationexception */ public int indexofwordstart(document doc, int pos) throws badlocationexception { // 从pos开始向前找到第一个非单词字符. for (; pos > 0 && iswordcharacter(doc, pos - 1); --pos); return pos; } /** * 取得下标为pos时, 它所在的单词结束的下标. a±wor^da± (^表示pos, a±表示开始或结束的下标) * * @param doc * @param pos * @return * @throws badlocationexception */ public int indexofwordend(document doc, int pos) throws badlocationexception { // 从pos开始向前找到第一个非单词字符. for (; iswordcharacter(doc, pos); ++pos); return pos; } /** * 如果一个字符是字母, 数字, 下划线, 则返回true. * * @param doc * @param pos * @return * @throws badlocationexception */ public boolean iswordcharacter(document doc, int pos) throws badlocationexception { char ch = getcharat(doc, pos); if (character.isletter(ch) || character.isdigit(ch) || ch == '_') { return true; } return false; } @override public void changedupdate(documentevent e) { } @override public void insertupdate(documentevent e) { try { colouring((styleddocument) e.getdocument(), e.getoffset(), e.getlength()); } catch (badlocationexception e1) { e1.printstacktrace(); } } @override public void removeupdate(documentevent e) { try { // 因为删除后光标紧接着影响的单词两边, 所以长度就不需要了 colouring((styleddocument) e.getdocument(), e.getoffset(), 0); } catch (badlocationexception e1) { e1.printstacktrace(); } } /** * 完成着色任务 * * @author biao * */ 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) { this.doc = doc; this.pos = pos; this.len = len; this.style = style; } public void run() { try { // 这里就是对字符进行着色 doc.setcharacterattributes(pos, len, style, true); } catch (exception e) {} } } }

本文来自用户投稿,不代表POS机办理网立场,如若转载,请注明出处:https://tlx668.com/poszx/7750.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年06月30日
下一篇 2023年06月30日

相关推荐

  • pos机显示参数

    pos机显示参数错误的原因:1. 显示器故障,如花、黑屏或颜色失真等。2. 计算机硬件故障,如主板、显卡、内存等损坏。3. 程序设计的源代码有问题。4. 组件兼容性问题,如驱动与显示器不兼容。5. 电源质量原因,如输出电流电压不稳定,容易对

    2023-11-21 15:00:50
    87 0
  • 查看pos机代码(pos机码查询)

    pos机查看商家代码(pos机查看商家代码是多少)一、什么是商家代码?商家代码是POS机上的一个唯一识别码,它由银行或支付机构分配给商户。通过该代码,可以快速、准确地识别商户身份。二、如何查看商家代码?1.打开POS机主菜单,选择“设置”选

    2023-10-28 19:00:39
    65 0
  • 怎样判断网页是否存在跳码现象?

    本文目录导读:如何判断网页是否存在跳码问题 观察页面布局和排版 检查网页源代码 检查网页加载速度 使用网页调试工具如何判断网页是否存在跳码问题跳码问题指的是网页中出现了与实际内容不相关的信息或者乱码现象,给用户带来了困扰和不便。对于网页制作

    2023-10-04 21:00:29
    99 0
  • 怎样判断网页是否存在跳码现象?

    本文目录导读:如何判断网页是否存在跳码问题 观察页面布局和排版 检查网页源代码 检查网页加载速度 使用网页调试工具如何判断网页是否存在跳码问题跳码问题指的是网页中出现了与实际内容不相关的信息或者乱码现象,给用户带来了困扰和不便。对于网页制作

    2023-10-04 21:00:29
    84 0
  • pos机程序源代码(pos机代码大全)

    本文目录pos机程序源代码(pos机程序源代码是什么)亲,求一份超市管理系统的源代码,只要源代码就行了如何查看程序源代码怎么看程序的源代码pos机程序源代码(pos机程序源代码是什么)一、程序架构POS机程序源代码的主要架构由四个模块组成:

    2023-09-22 04:00:19
    80 0
  • pos机系统源代码(pos机刷卡错误代码zz)

    pos机系统源代码1. POS机系统源代码的结构源代码主要分为前端和后端两部分。前端负责展示界面及用户操作,后端则负责数据处理和与数据库的交互。2. 前端源代码前端采用HTML、CSS、JavaScript等技术实现,主要包括登录界面、收银

    2023-08-28 10:00:09
    75 0

发表回复

8206

评论列表(0条)

    暂无评论