J2me文本编辑器设计代码
java课设文本编辑器的设计与实现
淮海工学院计算机工程学院
课程设计报告
设计名称:面向对象课程设计
选题名称:文本编辑器的设计与实现
姓名:学号:
专业班级:
系(院):计算机工程学院
设计时间:2015.6.21~2014.7.4
设计地点:计算机楼机房、教室、宿舍
();
("确定");
("这是一个简单的文本编辑器!");
();
();
();
(200,200,250,150);
();
(20 ,60,220,30);
( ("楷体",16));
();
(100,100,50,30);
();
}
( e)
{
(())
{
();
}
}
}
4.2运行结果显示
如图1:文本编辑器主界面
如图2:文本编辑器文件菜单
如图3:
文本
编辑
器编
辑菜
单
如图4:文本编辑器格式菜单
如图5:文本编辑器帮助菜单
如图6:文本编辑器字体格式和背景
如图7:
文本编。
J2ME程序设计实例教程(第01章)
②
打包MIDP应用程序,并发布到Web服务器 打包 应用程序,并发布到 服务器 应用程序 启动模拟器,安装 启动模拟器,安装MIDP应用程序 应用程序
(教材 ,例子 教材P6,例子1-1) )
1.4 MIDP应用程序 应用程序
MIDP应用程序是由若干个类所组成的,其中必须有 应用程序是由若干个类所组成的, 应用程序是由若干个类所组成的 一个类继承来自javax.microedition.midlet包中 一个类继承来自 包中 的抽象类MIDlet,这个类被称为应用程序的主类。运 的抽象类 ,这个类被称为应用程序的主类。 行时,移动信息设备上预置的Java应用管理器(Java 应用管理器( 行时,移动信息设备上预置的 应用管理器 Application Manager, JAM)负责创建主类 ) 的子类) (MIDlet的子类)的实例对象。 的子类 的实例对象。
图1-4 J2ME WTK目录结构
1.3 J2ME无线工具包 无线工具包——开发 开发MIDP程序 无线工具包 开发 程序
MIDP应用程序的开发过程: 应用程序的开发过程: 应用程序的开发过程
1.创建新项目 2.编写 编写MIDP应用程序 应用程序 3.编译、预校验 编译、 4.在模拟器上运行、调试 在模拟器上运行、 5.打包、发布应用程序 打包、
MIDlet套件(MIDlet Suite)是MIDP应用程序的集合,被 套件( 应用程序的集合, 套件 ) 应用程序的集合 封装成一个Jar文件。在这个文件中包含下面三部分内容。 文件。 封装成一个 文件 在这个文件中包含下面三部分内容。 实现MIDP应用程序的类文件,在一个MIDlet套件中可以有 应用程序的类文件,在一个 实现 应用程序的类文件 套件中可以有 多个MIDlet存在。 多个 存在。 存在 MIDlet所需要的资源文件,例如,图标、声音等等。 所需要的资源文件,例如,图标、声音等等。 所需要的资源文件 Jar清单文件 清单文件——MANIFEST.MF,用于描述 文件的内容。 清单文件 ,用于描述Jar文件的内容。 文件的内容 每个MIDlet套件都有一个对应的 套件都有一个对应的JAD(Java Application 每个 套件都有一个对应的 ( Descriptor,Java应用描述器)文件,用来描述 应用描述器) , 应用描述器 文件,用来描述MIDlet套件 套件 的信息。 的信息。
J2ME程序设计实例教程(第02章)
2.1 知识点——RecordEnumeration接口
RecordEnumeration接口定义了遍历记录枚举集 合中记录的方法。 常用方法:
public public public public public public public public public public
Form常用方法:
public public public public public public public
Form(String title) Form(String title, Item[] items) int append(Item item) void delete(int itemNum) void deleteAll) Item get(int itemNum) int size()
2.1 知识点——RecordStore类
打开、关闭、删除记录存储区的方法:
public static RecordStore openRecordStore(String name, boolean creat) public void closeRecordStore() public static void deleteRecordStore(String name)
1.
2.4代码实现 ——运行效果
各个功能的运行效果参见教材P43,图2-5
2.4代码实现 ——代码分析
教材P46~74
2.5 实践
动手实践是最好的老师。本章设计的课程表软件并 不完美,还有很多可以改进的地方。下面给出几点改进 意见,仅供参考。
添加图标 作息时间表 更改课程表浏览界面
Java写的简单文本编辑器代码(word文档良心出品)
import java.awt.*;import java.awt.eve nt.*; import java.io.*;public class Notepad /*impleme nts Action Liste ner , MouseListe ner ,MouseMoti on Liste ner , Win dowListe ner , ItemListe ner , KeyListe ner, TextListe ner */ {//成员变量 private Menultem miNew , miOpen , miSave , miSaveAs , miExit ; // 文 件菜单项:新建,打开,保存,另存为,退出private Menultem miCut , miCopy , miPaste , miDelete ;//编辑菜单项: 剪切,复制,粘贴,删除private Menultem miFont , miLowtoCapital , miCapitaltoLow , miEncrypt miDisencrypt ; //格式菜单项:字体 privateMenultemmiAboutNotepad ; // 帮助菜单项:关于记事本private Frame mainFrame ; // 主框架 private Men uBar mb ; // 菜单条private Me nu mFile , mEdit , mFormat式,帮助mHelp ; //菜单:文件,编辑,格 private TextAreata ; //文本区private StringtempString ; 〃临时字符串,用于存储需要复制粘贴的字符串private boolea n textValueCha nged = false privateint id_fo nt//字体Stri ng fileName = "" ; //上次保存后的文件名和地址//构造函数public Notepad(){//框架main Frame = new Frame ( "Notepad v0.99 by Laun chi ng" );mb = new Men uBar (); ta = new TextArea (30 ,60); ta .setFont( new Font ( "Times New Rome" , Font. PLAIN , 15)); ta .setBackground( new Color(0,250,200)); //菜单条 mFile = mEdit =new Menu ( new Menu("文件"); "编辑");mFormat = new Menu ( " 格式t" ); mHelp = new Menu ( " 帮助" );//" 文件"miNew = new MenuItem ( " 新建" ); miOpen = new MenuItem ( " 打开" ); miSave = new MenuItem ( " 保存" );miSaveAs = new MenuItem ( " 另存为" ); miExit = new MenuItem ( "退出" );//" 编辑"miCut = new MenuItem ( " 剪切" ); miCopy = new MenuItem ( " 复制" ); miPaste = new MenuItem ( " 粘贴" ); miDelete = new MenuItem ( " 删除" );//" 格式"miFont = new MenuItem ( "Font" );miLowtoCapital = new MenuItem( "Low to Capital"miCapitaltoLow = new MenuItem( "Capital to Low"miEncrypt = new MenuItem( "Encrypt" ); miDisencrypt = new MenuItem( "Disencrypt" );//" 帮助"miAboutNotepad = new MenuItem ( " 关于Notepad" );// 添加文件菜单项mFile .add( miNew );mFile .add( miOpen );mFile .add( miSave );mFile .add( miSaveAsmFile .add( miExit );// 添加编辑菜单项// 添加帮助菜单项mHelp .add( miAboutNotepad );); );mEdit .add( mEdit .add( mEdit .add( mEdit .add( miCut ); miCopy ); miPaste ); miDelete );// 添加格式菜单项mFormat .add( mFormat .add( mFormat .add( mFormat .add( mFormat .add( miFont ); miLowtoCapital miCapitaltoLow miEncrypt ); miDisencrypt);););//菜单条添加菜单 mb.add( mFile ); mb.add( mEdit ); mb.add( mFormat ); mb.add( mHelp );//框架添加菜单条mai nFrame .setMe nuBar( mb ); //初始字符串赋为空 tempString ="";//添加文本区main Frame .add( ta , BorderLayout. CENTER);main Frame .setSize(800,500);main Frame .setLocati on( 100 ,100); main Frame .setResizable( true mainFrame .setVisible( true ); //ma in Frame.pack();增加监视器 ////////////////////// //主框架mai nFrame .addWi ndowListe ner( new Win dowAdapter (){ //关闭窗口public void win dowClos in g(Wi ndowEve nt e) { System. exit (0); } });//文本区ta .addKeyListener( new KeyAdapter(){ public void KeyTyped(KeyEvent e){ _________textValueChanged = true ; //键盘按键按下即导致文本修改 }});////////////////" 文件"菜单:////////////////////////新建miNew .addActionListener( new ActionListener(){ public void action Performed(Act ion Eve nt e){//起始位置 );//不可更改大小 /////////////////////////ta .replaceRange( "",0 , ta .getText().length()); //清空文本区的内FileDialog d=new FileDialog( mai nFrame FileDialog. LOAD );II 打开文件对话框d.addWi ndowListe ner( new Win dowAdapter(){public void wi ndowClosi ng(Wi ndowEve nt ee){ System. exit (0);}});d.setVisible(true );"open file" ,//关闭文件对话框窗口//建立新文件fileName = d.getDirectory()+d.getFile(); //得到文件名char ch[] = new char [( int )f.length()]; 符数组III 用此文件的长度建立一个字try II 异常处理 {II 读出数据,并存入字符数组ch 中 BufferedReader bw = new BufferedReader( bw.read(ch);bw.close(); }catch ( FileNotFoundException fe ){ System. out .println( "file not found" ); System. exit (0); }catch ( lOException ie){ System. out .println( "IO error" ); System. exit (0); } new FileReader(f));String s =new String (ch);ta .setText(s); II 设置文本区为所打开文件的内容fileName = "" ;//文件名清空 } });//打开miOpen .addActionListener( new ActionListener(){ public void action Performed(Act ion Eve nt e) { File f =new File( d.getDirectory()+d.getFile());});// 保存miSave .addActionListener( new ActionListener(){ public void actionPerformed(ActionEvente) {if ( fileName .equals( ) ){ // 如果文件没有被保存过, 即文件名为空FileDialog d= new FileDialog( mainFrame , "save file" , FileDialog. SAVE ); // 保存文件对话框d.addWindowListener( new WindowAdapter(){ // 关闭文件对话框窗口public voidwindowClosing(WindowEvent ee){System. exit (0);}});d.setVisible( true );String s = ta .getText(); // 得到所输入的文本内容try // 异常处理{File f = new File( d.getDirectory()+d.getFile()); // 新建文件fileName = d.getDirectory()+d.getFile(); // 得到文件名BufferedWriter bw = new BufferedWriter( new FileWriter (f)); // 输入到文件中bw.write(s , 0 , s.length());bw.close();}catch (FileNotFoundException fe_){System. out .println( "file not found" );System. exit (0);}catch ( IOException ie_){System. out .println( " IO error" );System. exit (0);}}else // 如果文件已经保存过{String s = ta .getText(); // 得到所输入的文本内容try // 异常处理{File f = new File( fileName ); // 新建文件BufferedWriter bw = new BufferedWriter( new FileWriter (f)); // 输入到文件中bw.write(s , 0 , s.length());bw.close();}catch (FileNotFoundException fe_){System. out .println( "file not found" );System. exit (0);}catch ( IOException ie_){System. out .println( " IO error" );System. exit (0);}}}});// 另存为miSaveAs .addActionListener( new ActionListener(){ public void actionPerformed(ActionEvente) {FileDialog d= new FileDialog( mainFrame , "save file" , FileDialog. SAVE ); // 保存文件对话框d.addWindowListener( new WindowAdapter(){ // 关闭文件对话框窗口public voidwindowClosing(WindowEvent ee){System. exit (0);}});d.setVisible( true );String s = ta .getText(); // 得到所输入的文本内容try // 异常处理{File f = new File( d.getDirectory()+d.getFile()); // 新建文件BufferedWriter bw = new BufferedWriter( new FileWriter (f)); // 输入到文件中bw.write(s , 0 , s.length());bw.close();编辑" 菜单: //////////////////// // 剪切miCut .addActionListener( public voidactionPerformed(ActionEvent e){ tempString = ta .getSelectedText();tempString 中StringBuffer tmp = new StringBuffer ( 文本 int start = ta .getSelectionStart();int len = ta .getSelectedText().length(); 度tmp.delete( start , start+len); /// 删除所选中的字符串 ta .setText(tmp.toString()); // 用新文本设置原文本 } });// 复制miCopy .addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){tempString = ta .getSelectedText(); /// 得到要复制的内容 , 暂存在 tempString 中 } });// 粘贴miPaste .addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){System. System. }catch { System. out .println( exit (0); "file not found"( IOException ie_) out .println( " IO error"System.} exit (0);} }););miExit public System. } });.addActionListener( new ActionListener(){ void actionPerformed(ActionEvent e){ exit (0);/// 退出程序////////////////" new ActionListener(){/// 得到要复制的内容 , 暂存在ta .getText()); // 临时存储 // 得到要删除的字符串的起始位置// 得到要删除的字符串的长catch (FileNotFoundException fe_){// 退出////////////////" 格式 " 菜单: ////////////////////// 字体miFont .addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){final Dialog d = new Dialog ( mainFrame , "Font" ); // 新建对话框 d.setLocation( 250 ,250);// 起始位置中部分面板new List (6 , false ); // 字体列表"Plain" ); /// 普通字体 "Bold" ); /// 粗体 "Italic" ); // 斜体////////////////////////// 上部分面板Label l_font = new Label ( "font" ); //font 标签Panel p_1 = new Panel();p_1.add(l_font);p_1.setVisible(true );d.setLayout( new BorderLayout()); // 表格布局 StringBuffer tmp = 文本int start = tmp.insert(start , ta .setText(tmp.toString()); } });new StringBuffer ( ta .getSelectionStart();tempString // 删除miDelete .addActionListener( ta .getText()); // 得到要粘贴的位置 查入要粘贴的内容); // // 用新文本设置原文本 new ActionListener(){ public void actionPerformed(ActionEvent e){ StringBuffer tmp = new StringBuffer (文本int start = ta .getSelectionStart(); int len = ta .getSelectedText().length(); tmp.delete( start , start+len); ta .setText(tmp.toString()); } });// 临时存储ta .getText()); // 临时存储// 得到要删除的字符串的起始位置 //得到要删除的字符串的长/// 删除所选中的字符串// 用新文本设置原文本////////////////////////// List font_list =// 添加字体项目font_list.add( font_li st.add( font_list.add(font_list.addItemListener(增加监视器new MyItemListener_font() ); // 字体Panel p_2 = new Panel();p_2.add(font_list);p_2.setVisible( true );////////////////////////// Button ok = new Button ( ok.addActionListener(下部分面板"OK" );new ActionListener(){public voidd.dispose(); } });ok.setSize(actionPerformed(ActionEvent e){new Dimension (20 , 5) );Panel p_3 =p_3.add(ok); p_3.setVisible(new Panel(); // 下部分面板true );// 添加三个面板d.add(p_1 , BorderLayout. NORTH);d.add(p_2 , BorderLayout. CENTER);d.add(p_3 , BorderLayout. SOUTH);d.pack();d.addWindowListener( new WindowAdapter(){ public voidwindowClosing(WindowEvent ee){ d.dispose();}});// 关闭对话框窗口d.setVisible(}});true );// 小写字母转大写miLowtoCapital .addActionListener( new ActionListener(){ public voidactionPerformed(ActionEvent e){String s = ta .getText(); // 得到所输入的文本内容StringBuffer temp = new StringBuffer( "" );for ( int i = 0 ; i<s.length() ; i++){if (( int )s.charAt(i)>=97 &&( int )s.charAt(i)<=122 ){ temp.append(( char )(( int )s.charAt(i)-32));}elsetemp.append(s.charAt(i));}s = new String(temp);ta .setText(s);}});// 大写字母转小写miCapitaltoLow .addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){String s = ta .getText(); // 得到所输入的文本内容StringBuffer temp = new StringBuffer( "" );for ( int i = 0 ; i<s.length() ; i++){if (( int )s.charAt(i)>=65 && ( int )s.charAt(i)<=90 ){ temp.append(( char )(( int )s.charAt(i)+32));}elsetemp.append(s.charAt(i));}s = new String(temp);ta .setText(s);}});// 加密miEncrypt .addActionListener( new ActionListener(){ public voidactionPerformed(ActionEvent e){String s = ta .getText(); // 得到所输入的文本内容StringBuffer temp = new StringBuffer( "" );for ( int i = 0 ; i<s.length() ; i++){if (s.charAt(i)>=40 && s.charAt(i)<=125){if (i%2==0){temp.append(( char )(s.charAt(i) + 1 ));} else temp.append(( char )(s.charAt(i) - 1 ));} else temp.append(s.charAt(i));} s = new String(temp);ta .setText(s);}});// 解密miDisencrypt .addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){String s = ta .getText(); // 得到所输入的文本内容StringBuffer temp = new StringBuffer( "" );for ( int i = 0 ; i<s.length() ; i++){if (s.charAt(i)>=40 && s.charAt(i)<=125){if (i%2==0){temp.append(( char )(s.charAt(i) - 1 ));}elsetemp.append(( char )(s.charAt(i) + 1 ));}elsetemp.append(s.charAt(i));}s = new String(temp);ta .setText(s);}});帮助 " 菜单: ////////////////////// 关于记事本miAboutNotepad .addActionListener( new ActionListener(){ public voidactionPerformed(ActionEvent e){final Dialog d = new Dialog ( mainFrame , "AboutNotepad"建对话框TextArea t = new TextArea( "\nwelcome to use Notepad " + +"Copyright@Launching " + "\n\n" + "free software" + "\n\n" "v0.99" ); // 添加标签t.setSize( new Dimension ( 5 , 5));t.setEditable( false );d.setResizable( false ); // 不可调整大小 d.add(t);d.pack();d.addWindowListener( new WindowAdapter(){ // 关闭对话框窗口 public voidwindowClosing(WindowEvent ee){d.dispose();}});d.setLocation( 100 ,250); // 起始位置d.setVisible( true );}});}class MyItemListener_font implements ItemListener { // 字体监听器 public void itemStateChanged(ItemEvent e) {id_font = ((java.awt.List)e.getSource()).getSelectedIndex(); ////////////////" ); // 新"\n\n" +switch ( id_font ){case 0:{ta .setFont( new Font( "Times New Roman" ,Font. PLAIN , ta .getFont().getSize()) ); // 普通文字break ;}case 1:{ta .setFont( new Font( "Times New Roman" , Font. BOLD , ta .getFont().getSize()) ); // 粗体文字break ;}case 2:{ta .setFont( new Font( "Times New Roman" ,Font. ITALIC , ta .getFont().getSize()) ); // 斜体文字break ;}}}}////////////////////// public static Notepad test = } 一主函数////////////////////////////// void main (Stri ngarg[]){ newNotepad();///创建记事本//////////////////////////////////////////////////////////////// }运行效果图:。
JS开发富文本编辑器TinyMCE详解
JS开发富⽂本编辑器TinyMCE详解⼀、题外话最近负责了⼀个cms⽹站的运维,⾥⾯存在很多和编辑器有关的问题,⽐如编辑⼀些新闻博客,论⽂模块。
系统采⽤的是FCKEditor,⾃我感觉不是很好,如下图特别是在⽤户想插⼊⼀个图⽚的话,就很⿇烦,所有⽤户共享⼀个⽂件⽬录,这样就不好了,于是便想到了TinyMCE编辑器,博客园默认的也是这个编辑器,接下来,我们开始吧⼆、TinyMCE编辑器集成步骤2.1:下载相关⽂件(1)下载TinyMCE插件包,如下图所⽰,下载开发版(2)下载其他功能包包括中⽂语⾔包zh_CN.js,图⽚上传操作需要的plugin.min.js和jquery.form.js这⼀点很重要,很重要,很重要哦下载完成后如下图所⽰2.2:操作步骤(1):复制TinyMCE到项⽬中解压下载到的tinymce_4.6.4_dev.zip,解压后会有⼀个tinymce⽂件夹,将整个⽂件夹放到WebContent⽬录下,⽬录结构如下图所⽰(2):页⾯集成TinyMCE在页⾯的JS标签中初始化TinyMCE编辑器,代码如下所⽰<script type="text/javascript">tinymce.init({selector: "textarea",upload_image_url: './upload', //配置的上传图⽚的路由height: 400,language:'zh_CN',plugins: ['advlist autolink lists link charmap print preview hr anchor pagebreak','searchreplace wordcount visualblocks visualchars code fullscreen','insertdatetime media nonbreaking save table contextmenu directionality','emoticons template paste textcolor colorpicker textpattern imagetools codesample toc help'],toolbar1: 'undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',toolbar2: 'print preview media | forecolor backcolor emoticons | codesample help',image_advtab: true,templates: [{ title: 'Test template 1', content: 'Test 1' },{ title: 'Test template 2', content: 'Test 2' }],menubar: false});</script>运⾏如下图所⽰,基本的集成已经完毕三、TinyMCE编辑器本地上传图⽚功能注:默认的TinyMCE是没有上传本地图⽚到服务器的功能的,所以这⾥我们需要⾃⼰实现,下⾯我们就说⼀说具体的实现步骤3.1:集成uploadimage插件在./tinymce/js/tinymce/plugins⽬录下新建⼀个uploadimage⽬录,放⼊下载的plugin.min.js,⽬录结构如下图所⽰3.2:在TinyMCE初始化中添加上传图⽚按钮tinymce.init({selector: "textarea",upload_image_url: './upload', //配置的上传图⽚的路由height: 400,language:'zh_CN',plugins: ['advlist autolink lists link charmap print preview hr anchor pagebreak','searchreplace wordcount visualblocks visualchars code fullscreen','insertdatetime media nonbreaking save table contextmenu directionality','emoticons template paste textcolor colorpicker textpattern imagetools codesample toc help uploadimage'],toolbar1: 'undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',toolbar2: 'print preview media | forecolor backcolor emoticons | codesample help uploadimage',image_advtab: true,templates: [{ title: 'Test template 1', content: 'Test 1' },{ title: 'Test template 2', content: 'Test 2' }],menubar: false});再次运⾏,发现在编辑器的菜单栏多了⼀个图⽚的按钮就是上传图⽚了(TinyMCE默认有⼀个image,可以去掉,因为那个image只可以给⽹络图⽚的URL),总这⾥plugins⾥⾯已经把默认的image去掉了,如下图3.3:实现上传本地图⽚到服务器的功能前提:需要先⽤java实现⼀个upload⼯具类,此⼯具类可以完成本地图⽚上传到服务器,并返回图⽚的URL给ajax,ajax在success的⽅法中接收URL并向TinyMCE中插⼊⼀个image标签JS核⼼代码如下,已包含在plugin.min.js⽂件中,这⾥注意TinyMCE的版本不⽤命令可能会有差异success: function (data) {//alert('2222');//alert(data);if (data!=null) {//alert('4444');editor.focus();//tinyMCE 4.X版本的插⼊对象tinyMCE.activeEditor.insertContent('<img src="'+data+'"></img>');// editor.selection.setContent(dom.createHTML('img', {src: src}));// data.file_path.forEach(function (src) {// editor.selection.setContent(dom.createHTML('img', {src: src}));// })}ajax提交form表单的操作中还⽤到了form.ajaxSubmit,所以需要在编辑器的页⾯引⼊jquery.form.js 包,整体如下所⽰<script type="text/javascript" src="./tinymce/js/jquery-1.11.1.min.js"></script><script type="text/javascript" src="./tinymce/js/tinymce/tinymce.min.js"></script><script type="text/javascript" src="./tinymce/js/tinymce/jquery.tinymce.min.js"></script><script type="text/javascript" src="./tinymce/js/jquery.form.js"></script>实现效果,点击图⽚上传可以从本地选择图⽚⽂件,确定后ajax异步上传,并且返回图⽚的URL,让TinyMCE执⾏插⼊img标签的操作四:演⽰⼀个编辑器发布⽹页内容的例⼦4.1:添加发布按钮在编辑器页⾯下⾯添加⼀个发布⽂章的按钮,定义onclick事件为GetTinyMceContent()function GetTinyMceContent(){// <!--// http request⽅式b_content的参数不能太长,太长会截断,这⾥只是做演⽰编辑器,真实情况是获取到内容到数据库然后// 展⽰的时候在页⾯遍历数据库字段content的内容// -->//alert('11');window.location.href="blog.jsp?b_content="+tinyMCE.activeEditor.getContent();}4.2:添加⽂章显⽰页⾯如下图所⽰<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>⽂章内容-HTML</title></head><body><h2 align="center">我的第⼀篇博⽂</h2><%= request.getParameter("b_content") %></body></html>4.3:运⾏效果在编辑器输⼊⼀些内容,并上传⼀个图⽚,如下图⽰点击发布⽂章的按钮,如下图所⽰,发布成功可以在⽹页查看⽂章的输出格式,⼤功已经告成!4.4:总结在真实的环境中TinyMCE的内容不会通过在Request请求的后⾯以?参数名=参数值,然后在页⾯<%= request.getParameter("b_content") %>的形式处理,这⾥只是做⼀个流程的演⽰就没涉及数据库内容。
跟我学J2ME手机应用开发——高级界面中的基本组件开发技术
1.1跟我学J2ME手机应用开发——高级界面中的基本组件开发技术1.1.1基本组件应用实例1、Ticker和TextField类(1)Ticker类是一个类似跑马灯似的类(滚动字幕,滚动消息栏)所有的Displayable子类都可以加入Ticker组件,只需要利用定义在Displayable类中的setTicker()方法设定或者用getTicker()方法取出窗口内的Ticker对象。
Ticker类本身只有一个setString()的方法,用来设定所显示的内容。
(2)TextField为文字输入框,可以输入一行文字信息TextField类的构造函数,第一个参数是文本域的名称,第二个参数是缺省值,第三个参数是长度,第四个参数是文本域的类型,可选的值有:TextField.PASSWORD、TextField.EMAILADDR、TextField.PHONENUMBER、TextField.URL、TextField. NUMERIC 等。
构造好TextField对象之后,调用Form的append()方法将它添加到Form对象的子项目中(mainForm.append(tickerStringInputField);)。
TextField类中的常用方法有:insert、delete、setString、getString、getMaxSize、setMaxSize、size等。
package com.px1987.midpgui;import mand;import mandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.TextField;import javax.microedition.lcdui.Ticker;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class TickerDemo extends MIDlet implements CommandListener {private Form mainForm= null;private Display displayControl=null;private Command startMenuItem,stopMenuItem;private TextField tickerStringInputField;public TickerDemo() {super();displayControl=Display.getDisplay(this);mainForm= new Form ("跑马灯Ticker和TextField类示例");displayControl.setCurrent(mainForm);startMenuItem=new Command("开始",Command.OK,1);stopMenuItem=new Command("停止",Command.STOP,1);mainForm.addCommand(startMenuItem);mainForm.addCommand(stopMenuItem);tickerStringInputField = new TextField("输入跑马灯的文字", null, 25, TextField.ANY);mainForm.append(tickerStringInputField);}public void commandAction(Command oneCommand, Displayable oneDisplayable){ if( oneCommand==startMenuItem){Ticker oneTicker = new Ticker(tickerStringInputField.getString());mainForm.setTicker(oneTicker);}else if(oneCommand==stopMenuItem){mainForm.setTicker(null);}}protected void destroyApp(boolean arg0) throws MIDletStateChangeException { mainForm=null; //手机屏幕将会是一片空白System.gc();}protected void pauseApp() {}protected void startApp() throws MIDletStateChangeException {mainForm.setCommandListener(this); //绑定事件}}2、StringItem类(1)主要的功能StringItem为基本组件对象,它的作用就是在容器对象中显示一条字符串。
J2me系统编程入门2(高级UI类指南)
DateField
public static final int DATE_TIME; // =3 public static final int TIME; // =2 // Public Instance Methods public java.util.Date getDate(); public int getInputMode(); public void setDate( java.util.Date date); public void setInputMode( int mode); // Public Methods Overriding Item public void setLabel( String label); }
Ticker
Ticker
public class Ticker { // Public Constructors public Ticker( String str); // Public Instance Methods public String getString(); public void setString( String str); }
TextBox
/ANY Represents the absence of any constraint, allowing the field to contain any characters EMAILADDR Constrains the input to be an e-mail address NUMERIC Requires the field to contain a valid number. PASSWORD Does not constrain the characters that can be entered, but specifies that they should not be echoed.
J2ME平台下文本阅读器的实现
J2ME平台下文本阅读器的实现摘要本文利用J2ME技术开发了一个文本阅读器,实现了手机对文本文件的显示,给出了该程序的实现代码,并对其关键技术进行了详细阐述。
关键字J2ME 文本阅读器 Java 手机The Implementation of Text File Reader Based on J2MEAbstractThe paper presents a text file reader based on J2ME, make it possible that text file is displayed in mobile. It also gives the detail code of the application and illustrates its key technology.Key WordsJ2ME text file reader Java Mobile0引言随着通讯技术的发展及手机的普及 ,人们正在不断地给手机增加新的功能 ,其中 ,使手机实现一般只有 PC机才具有的功能——下载各种程序并运行 ,是目前手机发展的一个重要方向。
为此 ,人们提出了各种各样的解决方案 ,其中基于 JAVA的 J2 ME方案无疑是最引人注目的。
本文通过J2ME开发一个文本阅读器,该程序可下载到手机上,随时随地的进行阅读,这样就可以通过这种方式开发一些学习软件,使手机用户可有一个随身学习的工具书。
由于J2ME不可以对手机中的文件进行读写,所以在开发本程序时,只能在程序打包时把文本文件作为资源文件加入到J2ME发布程序中。
如果想读写手机上的文件,则要使用各手机商家提供的特定开发平台和专用的类来开发,下面就文本阅读器的关键技术进行说明。
1 J2ME文本阅读器中的文本格式J2ME中文本文件的格式,为了便于程序的开发和在运行中的读写处理,对要处理的文本文件要进行一定格式的整理。
本程序中的文本要求用纯文本即可,每章为一个独立的文件,每一章中均可为多段,在文本中加入的空格和各种符号都可在阅读时如实的显示出来。
java教材源代码第13章 J2ME应用程序开发
第13章J2ME应用程序开发在新创建的HelloWorld.java文件中输入如下代码。
//HelloWorld.javaimport javax.microedition.lcdui.*;import javax.microedition.midlet.MIDlet;public class HelloWorld extends MIDlet {Display display;public HelloWorld() {super();display = Display.getDisplay(this);}protected void startApp(){Form form = new Form("Hello World!");form.append("Welcome to J2ME world!");display.setCurrent(form);}protected void pauseApp() {}protected void destroyApp(boolean arg0){}}13.3.4 案例分析:MIDP应用程序实例本例的实现代码如下。
// DisplayMIDlet.java MIDlet应用程序实例import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class DisplayMIDlet extends MIDlet implements CommandListener { //Display管理Display display = null;//Form对象Form form = new Form("演示Display的使用");//创建命令按钮static final Command cmdOpenBackLight =new Command("打开背光灯", Command.ITEM,1);static final Command cmdStartVibrate =new Command("开始振动", Command.ITEM,1);static final Command cmdCloseBackLight =new Command("关闭背光灯", Command.ITEM,1);static final Command cmdStopVibrate =new Command("停止振动", Command.ITEM,1);static final Command cmdExit = new Command("退出", Command.STOP, 2);//构造函数public DisplayMIDlet() {// TODO 自动生成构造函数存根}protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO 自动生成方法存根notifyDestroyed();}protected void pauseApp() {// TODO 自动生成方法存根}protected void startApp() throws MIDletStateChangeException {// TODO 自动生成方法存根form.addCommand(cmdExit);form.addCommand(cmdOpenBackLight);form.addCommand(cmdCloseBackLight);form.addCommand(cmdStartVibrate);form.addCommand(cmdStopVibrate);form.setCommandListener(this);display = Display.getDisplay(this); //获得当前MIDlet的Display对象 display.setCurrent(form); //设置form对象为当前显示对象//显示是否支持彩色显示displayIsColor();//获取当前设备支持的最大颜色数displayNumberOfColors();//显示颜色常量的RGB值displayColorRGB();//显示当前设备能支持的Alpha级别displayAlphaLevel();}public void commandAction(Command arg0, Displayable arg1) {// TODO 自动生成方法存根String label = arg0.getLabel();if (label.equals("退出")) {try {destroyApp(true);} catch (MIDletStateChangeException e) {// TODO 自动生成 catch 块e.printStackTrace();}} else if(label.equals("打开背光灯")) {display.flashBacklight(40000);} else if(label.equals("关闭背光灯")) {display.flashBacklight(0);} else if(label.equals("开始振动")) {display.vibrate(40000);} else if(label.equals("停止振动")) {display.vibrate(0);}}/*** 获取当前设备支持的最大颜色数*/private void displayNumberOfColors() {int number = display.numColors();form.append("当前设备支持的颜色数:" + number);}/*** 显示是否支持彩色显示*/private void displayIsColor() {boolean color = display.isColor();form.append("当前设备是否支持彩色:" + color);}/*** 显示颜色常量的RGB值*/private void displayColorRGB() {String color;color = Integer.toHexString(display.getColor(Display.COLOR_BACKGROUND)).toUpperCase();form.append("背景颜色:" + color + "\n");color = Integer.toHexString(display.getColor(Display.COLOR_BORDER)).toUpperCase();form.append("边框颜色:" + color + "\n");color = Integer.toHexString(display.getColor(Display.COLOR_FOREGROUND)).toUpperCase();form.append("前景颜色:" + color + "\n");color = Integer.toHexString(display.getColor(Display.COLOR_HIGHLIGHTED_BACKGROUND)).toUpperCase(); form.append("高亮的背景颜色:" + color + "\n");color = Integer.toHexString(display.getColor(Display.COLOR_HIGHLIGHTED_BORDER)).toUpperCase();form.append("高亮的边框颜色:" + color + "\n");color = Integer.toHexString(display.getColor(Display.COLOR_HIGHLIGHTED_FOREGROUND)).toUpperCase();form.append("高亮的前景颜色:" + color + "\n");}/*** 显示当前设备能支持的Alpha级别*/private void displayAlphaLevel() {int level = display.numAlphaLevels();form.append("当前设备能支持的Alpha级别:" + level);}}13.4.5 案例分析:手机小游戏应用程序实例本例的实现代码如下。
J2ME编程简介[Tom]
从J2SE继承的类
这部分包括三个package,即 ng,java.util和java.io。注意即使这些 从J2SE继承的的类,也是大大“缩了水”的。例 如java.util的类与接口由J2SE的47个缩减到10 个。另外两个也有相应缩减。 系统类
From ng: Object, Class, Runtime, System, Thread, Runnable, String, StringBuffer, Throwable
Profile(简档)
所谓“简档(Profile)”是指由某个或几个从事 特定的设备生产的厂商制定的一系列API。 MIDP建立在CLDC之上,定义了附加的API和移 动通信设备所需的技术。 Profile层也包含一组API,主要针对于特定的 某一族系的设备而定义。
profile层在特定的configuration 层上实现, 而我们程序员则负责在特定的profile上编写应 用程序。 对于手机、PDA等有限连接设备,它们的profile 层称为MIDP。于是 MIDP 与 CLDC 合在一起就构 成了一个完整的J2ME架构。顺便说一句,对于 MIDP上的应用程序sun也有独特的叫法,它们被 称为MIDlet。你是不是觉得有点眼。想想java中 的applet。
MIDP
由于CLDC的目标设备种类繁多,因此,必须设 计不同的简档来满足这些设备,MIDP就是其中 最著名的、最常见的一种简档。MIDP架构于 CLDC之上。MIDP的目标设备,如手机、PDA、 双向传呼等,一般都具有以下特征: 最小屏幕尺寸为96X54像素 显示深度为1bit 用于输入的单手或双手键盘和触摸屏 128KB非易失性的内存用于MIDP组件 8KB非易失性内存哟浓郁持久数据存储
嵌入式平台项目开发研究——J2ME代码优化与紧缩
通 常来说 ,刚 刚开发 完成 的手机 游 戏或应用 软件 ,要 运行 在 真机 设备上常 常会 出现 一些 问题 ,如 :程 序无 法运 行 ,占用大 量 内存 ,运 行缓 慢等 等 。所 以开发完成 的产 品 ,必须通 过对 游戏 产 品进行 多方面 的优 化 。为了解 决这 些 问题 , 首先本 文先 介绍优 化 准 则 ,再介绍 解决 方案 。 优化 准则
文章 螭号 :10- 59( 00 3 0 2— 2 07 99 2 1 )1— 10 0
St udyo n Em b dy Pl to m v l pm e o a f r De eo nt
— —
Opi z t na d Co t cin o 2 t mia i n n r t f ME Co e o a o J d
计 算机 光盘软 件与 应用
软件设计开发
C m u e DS fw r n D l c to ቤተ መጻሕፍቲ ባይዱ o p t r C o ta e a dA p a n i i 21 第 l 0 0年 3期
嵌人式平台项 目开发研究
— —
.
1ME代码优化 与紧缩 2
郑 鸿
( 州大学数学与计 算机科 学学院 ,福州 30 1 ) 福 50 1
一
、
任 何的优 化方案 一般 要满足 以下 规则 : l 设计正 确 :整体结 构和 设计 正确将对 代码 优化 起到 最大 的 _
促进 :服务器 和客户 端之 间的操 作如 何进行 分割 。 2 最后优 化 。如果在 开 发过程 中过 早地进行 优 化将会 产生 很 .
J2ME程序设计实例教程(第08章)
8.1 知识点—— FileConnection
FileConnection接口定义了操作文件的所有方法, 通过调用Connector.open(String url)方法可以返 回一个FileConnection接口实例。参数url描述了资 源的位置,格式为 fille://<host>/<root>/<path>/<name>
启动J2ME无线开发工具,新建一个项目。 单击开发工具的【设置】按钮,显示当前项目的设置 对话框,打开“API选择”选项卡,然后单击“PDA Profile for J2ME (JSR 75)”单选按钮。单击 设置对话框的【确定】按钮。 将8.4.2节中的java源文件保存到新建项目的src目 录中。单击开发工具的【生成】按钮,编译源文件。 如果有错误,请修改源文件,保存后重新编译。 选择开发工具的菜单【项目】→【包】→【产生包】对 当前项目进行打包。打包成功后,将在当前项目的 bin目录下生成一个jar文件和一个jad文件。
FileConnection fc = null try { String url = "file:///root1/tom.txt"; fc = (FileConnection)Connector.open(url); //文件操作代码 fc.close();//关闭连接 } catch(IOException ioe) {// }
J2ME程序设计实例教程
第08章 文件管理器
作者 :杨光
E-mail:guang760212@
第8章 文件管理器
本章将设计一个文件管理器,学习FileConnection API的使用。 8.1 知识点 8.2 设计要求 8.3 类设计 8.4 代码实现 8.5 实践
3 详解J2ME MIDP程序开发流程
详解J2ME MIDP程序开发流程MIDlet 手机程序运行的基本架构MIDlet 手机程序开发流程MIDlet 手机程序生命周期MIDP 手机程序发布与安装使用混淆器(Obfuscator)WTK的相关配置仿真器的使用使用仿真器执行已开发MIDlet程序在进入手机程序设计之前,我们需要说明一个新的名词,那就是在手机上的应用程序名称。
我们都知道,在浏览器上执行的Java 程序叫做Applet,在Palm OS上执行的Java程序叫做Spotlet,而在手机上执行的应用程序就称之为“MIDlet”(Mobile Information Derice-let)。
如果有学习过Java程序设计的朋友,那么对MIDlet的开发就可以称的上是一个简单的差使了。
因为同样都是Java的架构,而且MIDlet在类别的使用上却简单了很多。
这也就是说,就算没有学过Java程序设计也不需要惊慌,只要学习少数的几个简单类别就可以写出一个MIDlet应用程序了。
一、MIDlet手机程序运行的基本架构根据上一章所介绍的知识得知,想要开发手机上的应用程序就是需要架构在CLDC (Configuration Layer)与MIDP(Profile Layer)之上,而WTK中就会符合且包含了JSR为CLDC 与MIDP的规范与所需的API函数库。
换句话说,想要学会MIDlet程序设计就必须先要深入了解它的基本架构与相关名称。
1.MIDlet Suit在手机上的应用程序称之为MIDlet,那么何谓MIDlet Suit(套件)呢?就是多个MIDlet 的集合封装,图1即为MIDlet与MIDlet Suit的关系示意图。
图1 MIDlet 与MIDlet Suit的关系示意图既然MIDlet Suit与MIDlet都可以在手机上执行,那么为何需要将MIDlet集合起来成为一个MIDlet Suit呢?这样的想法是基于手机上的资源有限,所以尽可能地将可以共享资源的MIDlet集合起来。
j2me_03
MIDlet的打包 MIDlet的打包
一个或多个MIDlet可以打包成一个JAR文 件,作为一个MIDlet Suite进行发布。这 个JAR文件包括:
一个描述其内容的清单(manifest文件) MIDlet Java类以及其它的辅助Java类 MIDlet使用的资源
MIDlet的打包 MIDlet的打包
当MIDlet完成任务或被AMS终止时,它 被销毁,而且其使用的资源被释放,包 括其创建的对象和其它类的对象。 MIDlet必须按照规定的方式终止运行, 它 不 能 调 用 System.exit , 否 则 将 引 发 SecurityException异常。
清单文件
清单文件必须包括如下的属性:
MIDlet-Name MIDlet-Version MIDlet-Vendor 每个MIDlet的MIDlet-<n>,n随MIDlet的数 目而增加。 MicroEdition-Profile MicroEdition-Configuration
清单文件
清单文件还可以包括以下属性:
MIDlet和 MIDlet和MIDlet Suite
J2ME软件架构 软件架构
MIDlet和 MIDlet和MIDlet Suite
在MIDP中,应用程序称为MIDlet,因为每 个MIDP应用程序都需要继承自MIDlet类。 在MIDP中只有一种类型的应用程序,即 MIDlet。 MIDlet可以使用MIDP规范中的API,而且也 可以使用来自CLDC规范的API。 MIDlet不能直接使用系统平台的本地API, 除非其放弃其设备无关特性。
MIDlet的管理 MIDlet的管理
MIDlet是应用程序管理系统启动程序的基本单 位。 应用程序管理系统对应用程序进行初始化并为 每个MIDlet提供如下功能:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
display.setCurrent(new Main());
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
}
}
class Main extends Canvas implements Runnable{
menuIndex=++menuIndex>list.length-1?0:menuIndex;
}else if(keyCode==-5||keyCode==KEY_NUM5){
switch(menuIndex){
case 0:
curState=STATE_EDITOR;
break;
case STATE_LIST:
break;
case STATE_READ:
break;
case STATE_TEST:
g.setColor(0);
g.setFont(FONT_TITLE);
g.drawString("字体测试1",10,10,0);
FONT_SELECT=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE);
FONT_MENU=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
if(keyCode==-7){
curState=STATE_MAIN;
}
break;
case STATE_LIST:
break;
case STATE_READ:
break;
case STATE_TEST:
}
g.drawString(list[i],screenW/2-25,100+FONT_TITLE.getHeight()*i,0);
}
}
public void update(){
}
}
protected void keyPressed(int keyCode){
J2me文本编辑器设计代码
import java.awt.TextField;
import javax.microedition.midleicroedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.Display;
FONT_TEXT=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_SMALL);
screenW=240;
screenH=320;
this.setFullScreenMode(true);
new Thread(this).start();
switch(curState){
case STATE_MAIN:
if(keyCode==-1||keyCode==KEY_NUM2){
menuIndex=--menuIndex<0?list.length-1:menuIndex;
}else if(keyCode==-2||keyCode==KEY_NUM8){
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
for(int i=0;i<list.length;i++){
if(menuIndex==i){
g.setFont(FONT_SELECT);
g.setColor(0x9400D3);
}else{
g.setColor(0);
g.setFont(FONT_MENU);
import javax.microedition.lcdui.Font;
public class Editor extends MIDlet {
public static Editor instance;
Display display;
public Editor(){
instance=this;
g.setFont(FONT_MENU);
g.drawString("字体测试2",10,50,0);
g.setFont(FONT_TEXT);
g.drawString("字体测试3",10,100,0);
break;
}
}
private void drawMainMenu(Graphics g){
public static final byte STATE_READ=3;
public static final byte STATE_TEST=4;
public Font FONT_TITLE;
public Font FONT_MENU;
public Font FONT_TEXT;
break;
case 1:break;
case 2:
Editor.instance.notifyDestroyed();
break;
}
}
break;
case STATE_EDITOR:
g.setColor(0x9BCD9B);
g.fillRect(0,0,screenW,screenH);
g.setColor(0xFF3030);
g.setFont(FONT_TITLE);
g.drawString("软件(调试中……)",screenW>>1,20,g.TOP|g.HCENTER);
public Font FONT_SELECT;
int menuIndex=0;
int screenW,screenH;
String[] list={"新建","浏览","退出"};
public Main(){
FONT_TITLE=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE);
}
protected void paint(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0,0,screenW,screenH);
switch(curState){
case STATE_MAIN:
drawMainMenu(g);
public byte curState=0;
public static final byte STATE_MAIN=0;
public static final byte STATE_EDITOR=1;
public static final byte STATE_LIST=2;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Canvas;
break;
}
}
protected void keyReleased(int keyCode) {
}
public void run() {
while(true){
update();
repaint();
try {
break;
case STATE_EDITOR:
g.setColor(0xFF7F00);
g.fillRect(0,0,screenW,screenH);
g.setColor(0);
g.drawString("文本编辑界面",50,50,0);