由于期末降至,每年的學校的實訓也開始了募谎,實訓當然不是每天工地搬磚胺龉亍!
嗯数冬,今年的實訓是利用Java去制作各種各樣的東西节槐,有仿Windows記事本搀庶,有網頁瀏覽器制作,有日歷記事本铜异,還有連連看游戲制作哥倔,嗯,當然不是全部都做啊揍庄,那就來不及了咆蒿,畢竟學校也是有時間限制的,就三四天時間蚂子。我的話沃测,抽到的題目是Windows記事本的制作!食茎!
額蒂破,順便說一句,寒假里我要是有空的話别渔,我會繼續(xù)更的附迷,把各種瀏覽器連連看的也都做一遍,把代碼都發(fā)上來钠糊,希望我時間足夠吧挟秤。
哦,對了抄伍,我之后寫的文章里的代碼都是簡化后的,完整代碼管宵,我會在最后附上鏈接截珍。
好了好了,廢話到此結束箩朴。
=============我是一根正經的分割線==============
制作記事本岗喉,嗯,可以分為五個步驟:
首先的話炸庞,界面的制作:
自己想好自己要做什么樣子的記事本钱床,我就直接想好了,自己大概制作什么樣子的記事本:
嗯埠居,想好自己要做成什么樣子的話查牌,接下來就簡單了。
先設置個我們要的這個界面:
private NotePadFrame f;
布局設計滥壕,首先新建一個菜單欄纸颜,滾動條,以及一個文本框绎橘,以及用來給予提示的幫助欄胁孙。
private JMenuBar menuBar;
private JTextArea jTextArea; //文本區(qū)域
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); //將滾動條添加進面板
//設置滾動條自動出現(xiàn)
jScrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); //水平
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); //豎直
jScrollPane.setViewportView(jTextArea);
jTextArea.getDocument().addUndoableEditListener(undo);
嗯苫亦。毛肋。。屋剑。本來的話润匙,還有一大堆初始化,但是考慮到太長了唉匾,所以我就把一些都簡化了孕讳,一些關鍵的語句繼續(xù)留著,這一大堆都初始化完了巍膘,就可以進行下一步了厂财,將按鈕利用add()函數,把菜單逐漸添加進入各個更上一層的菜單或者界面峡懈。比如:
editMenu.add(editFind);
嗯璃饱,將所有按鈕都已經初始化了,那么肪康,就需要給所有按鈕添加事件了荚恶,添加事件的話,代碼就可長了磷支,我就簡單的給一個退出界面的事件吧谒撼。詳細的話,還是看我最后給的鏈接吧雾狈。
closeItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
嗯廓潜,幾乎所有的事件都能按照這個格式寫。
用這個格式的好處就是善榛,不必在初始化中設置:closeItem.addActionListener(this);
監(jiān)視器設置完了辩蛋,接下去就是寫事件了,寫事件簡直太長了锭弊,起碼有五百行堪澎。。味滞。
嗯樱蛤,所以钮呀,以下的所有的一些大家自己在寫的時候容易落下或者容易忽略的一些代碼:
首先是剪切板的:
//系統(tǒng)剪切板調用
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);
還有在查找頁面上的查找(最重要的實現(xiàn)功能的幾句話):
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());
以上就是所有了昨凡,最后的話爽醋,代碼位置在這里!1慵埂蚂四!我寫的另外一篇!D奶怠遂赠!
http://blog.csdn.net/wangha_1/article/details/78937248