由于期末降至,每年的学校的实训也开始了,实训当然不是每天工地搬砖啊!
嗯,今年的实训是利用Java去制作各种各样的东西,有仿Windows记事本,有网页浏览器制作,有日历记事本,还有连连看游戏制作,嗯,当然不是全部都做啊,那就来不及了,毕竟学校也是有时间限制的,就三四天时间。我的话,抽到的题目是Windows记事本的制作!!
额,顺便说一句,寒假里我要是有空的话,我会继续更的,把各种浏览器连连看的也都做一遍,把代码都发上来,希望我时间足够吧。
哦,对了,我之后写的文章里的代码都是简化后的,完整代码,我会在最后附上链接。
好了好了,废话到此结束。
=============我是一根正经的分割线==============
制作记事本,嗯,可以分为五个步骤:
首先的话,界面的制作:
自己想好自己要做什么样子的记事本,我就直接想好了,自己大概制作什么样子的记事本:
嗯,想好自己要做成什么样子的话,接下来就简单了。
先设置个我们要的这个界面:
private NotePadFrame f;
布局设计,首先新建一个菜单栏,滚动条,以及一个文本框,以及用来给予提示的帮助栏。
private JMenuBar menuBar;
private JTextArea jTextArea; //文本区域
private JScrollPane jScrollPane; //滚动条
private JLabel statusLabel;
然后,新建菜单栏中的各种按钮菜单以及子菜单:
private JMenu fileMenu; //文件菜单
private JMenu editMenu; //编辑菜单
private JMenu formatMenu; //格式菜单
private JMenu viewMenu; //查看菜单
private JMenu helpMenu; //帮助菜单
private JMenuItem openItem, closeItem, saveItem,aboutItem;
private JMenuItem newItem, savetoItem; //新建项目,另存为项目
//编辑菜单中的所有项目
private JMenuItem editUndo, editCut, editCopy, editPaste, editDelete, editFind, editFindnext, editReplace, editGoto, editAll, editDates;
//格式菜单下的项目
private JMenuItem formatFont; //字体
private JCheckBoxMenuItem formatLinewrap; //自动换行
//查看菜单下的项目
private JCheckBoxMenuItem Status;
嗯,所有的子菜单都新建了,然后就是初始化:
JFrame frame = new JFrame("Wangha's Text"); //建立一个名为记事本·伪的窗口
frame.setBounds(300, 300, 700, 450); //窗口位置在300,300,窗口大小为700*450
frame.setDefaultCloseOperation(EXIT_ON_CLOSE); //
menuBar = new JMenuBar(); //初始化菜单栏
jTextArea = new JTextArea(10, 40); //10行40列
Font x = new Font("Monospaced",1,20); //定义字体大小以及一些属性
jTextArea.setFont(x); //只能使用x这种字体
jTextArea.setLineWrap(true);//到达指定宽度则换行
//应当首先利用构造函数指定JScrollPane的控制对象,此处为JTextArea,然后再讲JScrollPane
jScrollPane = new JScrollPane(jTextArea); //将滚动条添加进面板
//设置滚动条自动出现
jScrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); //水平
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); //竖直
jScrollPane.setViewportView(jTextArea);
jTextArea.getDocument().addUndoableEditListener(undo);
嗯。。。。本来的话,还有一大堆初始化,但是考虑到太长了,所以我就把一些都简化了,一些关键的语句继续留着,这一大堆都初始化完了,就可以进行下一步了,将按钮利用add()函数,把菜单逐渐添加进入各个更上一层的菜单或者界面。比如:
editMenu.add(editFind);
嗯,将所有按钮都已经初始化了,那么,就需要给所有按钮添加事件了,添加事件的话,代码就可长了,我就简单的给一个退出界面的事件吧。详细的话,还是看我最后给的链接吧。
closeItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
嗯,几乎所有的事件都能按照这个格式写。
用这个格式的好处就是,不必在初始化中设置:closeItem.addActionListener(this);
监视器设置完了,接下去就是写事件了,写事件简直太长了,起码有五百行。。。
嗯,所以,以下的所有的一些大家自己在写的时候容易落下或者容易忽略的一些代码:
首先是剪切板的:
//系统剪切板调用
Toolkit toolkit=Toolkit.getDefaultToolkit();
Clipboard clipBoard=toolkit.getSystemClipboard();
然后是撤销操作中的一些代码:
protected UndoManager undo=new UndoManager();
protected UndoableEditListener undoHandler=new UndoHandler();
class UndoHandler implements UndoableEditListener
{ public void undoableEditHappened(UndoableEditEvent uee)
{ undo.addEdit(uee.getEdit());
}
}
public void removeUpdate(DocumentEvent e)
{ editUndo.setEnabled(true);
}
public void insertUpdate(DocumentEvent e)
{ editUndo.setEnabled(true);
}
public void changedUpdate(DocumentEvent e)
{ editUndo.setEnabled(true);
}//DocumentListener结束
jTextArea.addUndoableEditListener(undo);
还有在查找页面上的查找(最重要的实现功能的几句话):
if(jTextArea.getSelectedText()==null)
k=strA.indexOf(strB,jTextArea.getCaretPosition()+1);//index 返回第一个索引的位置,从这个位置开始搜索
else
k=strA.indexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()+1);
if(k>-1)
{ //String strData=strA.subString(k,strB.getText().length()+1);
jTextArea.setCaretPosition(k);
jTextArea.select(k,k+strB.length());
以上就是所有了,最后的话,代码位置在这里!!!我写的另外一篇!!!
http://blog.csdn.net/wangha_1/article/details/78937248