您好,登錄后才能下訂單哦!
最近學(xué)了Java編程,就編了仿windows系統(tǒng)下的記事本練練手,這個(gè)記事本實(shí)現(xiàn)了windows系統(tǒng)下的大部分功能,只有很少的部分沒有實(shí)現(xiàn),比如撤銷命令的不完美,這是本人的能力有限,還有那些JMenuItem的是否可用問題,這只是本人比較偷懶,無心再去實(shí)現(xiàn),希望能夠與廣大的Java愛好者分享我的代碼,共同學(xué)習(xí)進(jìn)步,我肯定有不足之處,比如有些代碼的重復(fù),代碼的布置,以及變量的取名問題,希望廣大的Java大牛多提寶貴意見,話不多少,直接上代碼!
package org.mfy.notepad; import java.awt.*; import javax.swing.* ; import java.awt.event.* ; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.swing.event.*; import javax.swing.text.BadLocationException; import javax.swing.undo.*; public class MyNotepad extends JFrame{ //文件的標(biāo)題 private String title = "無標(biāo)題" ; //菜單欄 private JPanel mp = new JPanel() ; private JMenuBar mb = new JMenuBar() ; private JMenu file = new JMenu("文件(F)"), edit = new JMenu("編輯(E)"), format = new JMenu("格式(V)"), view = new JMenu("查看(O)"), help = new JMenu("幫助(H)"); //文件 private JMenuItem newFile = new JMenuItem("新建(N)") , open = new JMenuItem("打開(O)") , save = new JMenuItem("保存(S)") , exit = new JMenuItem("退出(X)") ; //編輯 private JMenuItem undo = new JMenuItem("撤銷(U)") , cut = new JMenuItem("剪切(T)") , copy = new JMenuItem("復(fù)制(C)") , paste = new JMenuItem("粘貼(P)") , delete = new JMenuItem("刪除(L)") , find = new JMenuItem("查找(F)") , replace = new JMenuItem("替換(R)") , goTo = new JMenuItem("轉(zhuǎn)到(G)") , selectAll = new JMenuItem("全選(A)") , time = new JMenuItem("時(shí)間/日期(D)") ; //格式 private JMenuItem font = new JMenuItem("字體(F)") ; private JCheckBox autoLineWrap = new JCheckBox("自動(dòng)換行(W)") ; //查看 private JMenuItem state = new JMenuItem("狀態(tài)(S)") ; //幫助 private JMenuItem checkHelp = new JMenuItem("查看幫助(H)") , about = new JMenuItem("關(guān)于記事本(A)") ; //文本域 private JTextArea txt = new JTextArea() ; //彈出菜單 private JPopupMenu jpm = new JPopupMenu() ; //定義彈出窗口的打開狀態(tài) private static boolean isOpen = false ; //獲取屏幕的尺寸 private int x = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth() ; private int y = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight() ; public MyNotepad(){ //新建 newFile.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String text = txt.getText() ; if(!text.equals("")){ String str[] = text.split("\n") ; int result = JOptionPane.showConfirmDialog(null, "是否將更改保存到 "+ title+"?", "記事本", JOptionPane.YES_NO_CANCEL_OPTION) ; if(result == JOptionPane.NO_OPTION){ //不保存 txt.setText(""); }else if(result == JOptionPane.CANCEL_OPTION){} //取消保存 else if(result == 0){ //保存 JFileChooser jfc = new JFileChooser() ; jfc.setDialogTitle("保存"); int ssd = jfc.showSaveDialog(MyNotepad.this) ; if(ssd == jfc.APPROVE_OPTION){ File file = jfc.getSelectedFile() ; PrintStream out = null ; try { out = new PrintStream(new FileOutputStream(file)) ; } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for(String s:str){ out.print(s + "\r\n"); } out.close(); txt.setText(""); ; } } } } }); //打開 open.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JFileChooser jfc = new JFileChooser() ; jfc.setDialogTitle("打開"); int result = jfc.showOpenDialog(MyNotepad.this) ; if(result == JFileChooser.CANCEL_OPTION){} else if(result == JFileChooser.APPROVE_OPTION){ File file = jfc.getSelectedFile() ; BufferedReader input = null ; try { input = new BufferedReader(new InputStreamReader(new FileInputStream(file))) ; } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String temp = null ; try { while((temp = input.readLine())!=null){ txt.append(temp +"\n"); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { input.close() ; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }); //保存 save.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String str[] = txt.getText().split("\n") ; JFileChooser jfc = new JFileChooser() ; jfc.setDialogTitle("保存"); int ssd = jfc.showSaveDialog(MyNotepad.this) ; if(ssd == jfc.APPROVE_OPTION){ File file = jfc.getSelectedFile() ; PrintStream out = null ; try { out = new PrintStream(new FileOutputStream(file)) ; } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for(String s:str){ out.print(s + "\r\n"); } out.close(); } } }); //退出 exit.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { String str = txt.getText() ; if(!str.equals("")){ int result = JOptionPane.showConfirmDialog(null, "退出前是否保存?", "退出", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) ; if(result == JOptionPane.YES_OPTION){} if(result == JOptionPane.NO_OPTION){ dispose() ; } if(result == JOptionPane.CANCEL_OPTION){} }else{ dispose() ; } } }); /** * 撤銷功能 */ final UndoManager undom = new UndoManager() ; txt.getDocument().addUndoableEditListener(new UndoableEditListener(){ @Override public void undoableEditHappened(UndoableEditEvent e) { undom.addEdit(e.getEdit()) ; } }); undo.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { if(undom.canUndo()){ undom.undo(); } } }); //剪切 cut.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ txt.cut() ; } }); //粘貼 paste.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ txt.paste(); } }); //刪除 delete.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int start = txt.getSelectionStart() ; int end = txt.getSelectionEnd() ; txt.replaceRange("", start, end); } }); /** * 為了更好地訪問本類中的屬性,所以查找使用內(nèi)部類 */ //定義查找內(nèi)部類 class FindDialog extends JDialog{ private JPanel pan = new JPanel() ; private JLabel label = new JLabel("查找內(nèi)容(N):") ; private JTextField txtf = new JTextField(20) ; private JButton btnf = new JButton("查找下一個(gè)(F)") ; private JButton btnc = new JButton("取消") ; private JCheckBox jcb = new JCheckBox("區(qū)分大小寫(C)") ; private JRadioButton jrb1 = new JRadioButton("向上(U)") ; private JRadioButton jrb2 = new JRadioButton("向下(D)",true) ; public FindDialog(){ super(MyNotepad.this, "查找") ; //當(dāng)文本框中有內(nèi)容時(shí)按鈕才起作用 txtf.getDocument().addDocumentListener(new DocumentListener(){ @Override public void insertUpdate(DocumentEvent e) { btnf.setEnabled(true); } @Override public void removeUpdate(DocumentEvent e) { if(txtf.getText().length() == 0){ btnf.setEnabled(false); } } @Override public void changedUpdate(DocumentEvent e) { } }); btnf.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String str = txtf.getText() ; String texta = txt.getText() ; int start = 0 ; int end = 0 ; int caretPosition = txt.getCaretPosition() ; //記錄光標(biāo)的起始位置 if(jcb.isSelected()){ //區(qū)分大小寫 if(jrb2.isSelected()){ //向下查詢,如果有光標(biāo)就從光標(biāo)的位置開始查找,否則就從選中的文本之后的位置開始查找 start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ; start = texta.indexOf(str, start) ; if(start == -1){ //如果沒有找到 JOptionPane.showMessageDialog(null, "找不到"+str); }else{ //如果找到了 end = start + str.length() ; txt.select(start, end); } }else if(jrb1.isSelected()){ //向上查詢,如果有光標(biāo)就從光標(biāo)的位置開始查找,否則就從選中的文本之前的位置開始查找 end = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionStart()) ; String subtext = texta.substring(0, end) ; start = subtext.lastIndexOf(str, end-1) ; if(start == -1){ JOptionPane.showMessageDialog(null, "找不到"+str) ; }else{ end = start + str.length() ; txt.select(start, end); } } } if(!jcb.isSelected()){ //不區(qū)分大小寫 texta = texta.toLowerCase() ; if(jrb2.isSelected()){ //向下查詢,如果有光標(biāo)就從光標(biāo)的位置開始查找,否則就從選中的文本之后的位置開始查找 start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ; start = texta.indexOf(str.toLowerCase(), start) ; if(start == -1){ //如果沒有找到 JOptionPane.showMessageDialog(null, "找不到"+str) ; }else{ //如果找到了 end = start + str.length() ; txt.select(start, end); } }else if(jrb1.isSelected()){ //向上查詢,如果有光標(biāo)就從光標(biāo)的位置開始查找,否則就從選中的文本之前的位置開始查找 end = (txt.getSelectedText() == null ? caretPosition : txt.getSelectionStart()) ; String subtext = texta.substring(0, end) ; start = subtext.lastIndexOf(str.toLowerCase(), end-1) ; if(start == -1){ JOptionPane.showMessageDialog(null, "找不到"+str) ; }else{ end = start + str.length() ; txt.select(start, end); } } } } }); btnc.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dispose() ; isOpen = false ; } }); this.setLayout(null) ; label.setBounds(12,10,80,20) ; txtf.setBounds(100,10,170,20) ; btnf.setBounds(280,10,90,20) ; btnf.setMargin(new Insets(0, 0,0, 0)) ; btnf.setEnabled(false); //初始化查找下一個(gè)按鈕不可選 jcb.setBounds(12,70,110,20) ; jrb1.setMargin(new Insets(0,0,0,0)) ; jrb2.setMargin(new Insets(0,0,0,0)) ; ButtonGroup group = new ButtonGroup() ; group.add(jrb1); group.add(jrb2); pan.add(jrb1) ; pan.add(jrb2) ; pan.setBorder(BorderFactory.createTitledBorder("方向")) ; pan.setBounds(120,40,150,55) ; btnc.setBounds(280,40,90,20) ; btnc.setMargin(new Insets(0,0,0,0)) ; add(btnf) ; add(label) ; add(txtf) ; add(jcb) ; add(pan) ; add(btnc) ; setSize(380,130) ; setLocation(x/2-190,y/2-65) ; setResizable(false) ; setVisible(true) ; setDefaultCloseOperation(DISPOSE_ON_CLOSE) ; //每次只能顯示一個(gè)窗口 addWindowListener(new WindowAdapter(){ public void windowOpened(WindowEvent e){ isOpen = true ; } }) ; addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ isOpen = false ; } }) ; } } //查找的監(jiān)聽事件 find.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(!isOpen){ new FindDialog() ; } } }); //替換內(nèi)部類 class ReplaceDialog extends JDialog{ private JLabel label1 = new JLabel("查找內(nèi)容(N)") ; private JLabel label2 = new JLabel("替換為(P)") ; private JTextField field1 = new JTextField(20) ; private JTextField field2 = new JTextField(20) ; private JButton find = new JButton("查找下一個(gè)(F)") ; private JButton replace = new JButton("替換(R)") ; private JButton replaceAll = new JButton("全部替換(A)") ; private JButton canc = new JButton("取消") ; private JCheckBox jcb = new JCheckBox("區(qū)分大小寫(C)") ; public ReplaceDialog(){ super(MyNotepad.this,"查找") ; this.setLayout(null) ; label1.setBounds(12,5,80,20) ; label2.setBounds(12,30,80,20) ; field1.setBounds(100,5,170,20) ; field2.setBounds(100,30,170,20) ; find.setBounds(280,5,90,20) ; find.setMargin(new Insets(0, 0,0, 0)) ; replace.setBounds(280,30,90,20) ; replace.setMargin(new Insets(0,0,0,0)) ; replaceAll.setBounds(280,55,90,20) ; replaceAll.setMargin(new Insets(0,0,0,0)) ; jcb.setBounds(12,70,105,20) ; jcb.setMargin(new Insets(0,0,0,0)) ; canc.setBounds(280,80,90,20) ; field1.getDocument().addDocumentListener(new DocumentListener(){ //當(dāng)文本框中有內(nèi)容時(shí)按鈕才起作用 @Override public void insertUpdate(DocumentEvent e) { find.setEnabled(true); replace.setEnabled(true); replaceAll.setEnabled(true); } @Override public void removeUpdate(DocumentEvent e) { if(field1.getText().length() == 0){ find.setEnabled(false); replace.setEnabled(false); replaceAll.setEnabled(false); } } @Override public void changedUpdate(DocumentEvent e) { } }); //查找下一個(gè)按鈕 find.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ new findFunction() ; } }); //替換按鈕 replace.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //如果有選中的內(nèi)容就替換,然后選中下一個(gè)要替換的內(nèi)容,否則先查找要替換的內(nèi)容 if(txt.getSelectedText()!=null){ txt.replaceSelection(field2.getText()); } new findFunction() ; } }); //替換所有按鈕 replaceAll.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String str = txt.getText() ; if(jcb.isSelected()){ str = str.replaceAll(field1.getText(), field2.getText()) ; }else{ str = str.replaceAll("(?i)" + field1.getText(), field2.getText()) ; } txt.setText(str); } }); //取消按鈕 canc.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dispose() ; isOpen = false ; } }); add(label1) ; add(label2) ; add(field1) ; add(field2) ; find.setEnabled(false); replace.setEnabled(false); replaceAll.setEnabled(false); add(find) ; add(replace) ; add(replaceAll) ; add(jcb) ; add(canc) ; setSize(380,130) ; setLocation(x/2-190,y/2-65) ; setResizable(false) ; setVisible(true) ; setDefaultCloseOperation(DISPOSE_ON_CLOSE) ; addWindowListener(new WindowAdapter(){ public void windowOpened(WindowEvent e){ isOpen = true ; } }) ; addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ isOpen = false ; } }) ; } //替換對(duì)話框中查找功能類 /** * 為了簡化代碼,將替換對(duì)話框里面的查找功能提取出來,成為一個(gè)內(nèi)部類 */ class findFunction { public findFunction(){ //要替換的字符串的位置 int start = 0 ; int end = 0 ; int caretPosition = txt.getCaretPosition() ; String str = field1.getText() ; String texta = txt.getText() ; //區(qū)分大小寫,向下查詢,如果有光標(biāo)就從光標(biāo)的位置開始查找,否則就從選中的文本之后的位置開始查找 if(jcb.isSelected()){ start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ; start = texta.indexOf(str.toLowerCase(), start) ; if(start == -1){ //如果沒有找到 JOptionPane.showMessageDialog(null, "找不到"+str) ; }else{ //如果找到了 end = start + str.length() ; txt.select(start, end); } }else if(!jcb.isSelected()){ //不區(qū)分大小寫 texta = texta.toLowerCase() ; //向下查詢,如果有光標(biāo)就從光標(biāo)的位置開始查找,否則就從選中的文本之后的位置開始查找 start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ; start = texta.indexOf(str.toLowerCase(), start) ; if(start == -1){ //如果沒有找到 JOptionPane.showMessageDialog(null, "找不到"+str) ; }else{ //如果找到了 end = start + str.length() ; txt.select(start, end); } } } } } replace.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(!isOpen){ new ReplaceDialog() ; } } }); //轉(zhuǎn)到內(nèi)部類 class GoToDialog extends JDialog{ private JLabel label = new JLabel("行號(hào)(L):") ; private JTextField field = new JTextField() ; private JButton goToBtn = new JButton("轉(zhuǎn)到") ; private JButton canBtn = new JButton("取消") ; private int rowNum = 0 ;//行號(hào) public GoToDialog(){ field.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ if(!(e.getKeyChar()>='0' && e.getKeyChar()<='9' )){ e.consume(); } } }); //轉(zhuǎn)到 goToBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ rowNum = Integer.parseInt(field.getText()) ; if(rowNum>txt.getLineCount()){ JOptionPane.showMessageDialog(null, "行數(shù)超過了總行數(shù)", "記事本-跳行",JOptionPane.INFORMATION_MESSAGE); field.setText(txt.getLineCount() +"") ; field.requestFocus() ; //獲取文本域的焦點(diǎn) field.selectAll(); }else{ int position = 0 ; try { position = txt.getLineStartOffset(rowNum-1) ; } catch (BadLocationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } GoToDialog.this.dispose(); txt.requestFocus(); txt.setCaretPosition(position); } } }); //取消 canBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dispose() ; isOpen = false ; } }); setLayout(null) ; label.setBounds(12,10,100,20) ; field.setBounds(12,30,230,20) ; goToBtn.setBounds(85,65,75,20) ; canBtn.setBounds(167,65,75,20) ; add(label) ; add(field) ; add(goToBtn) ; add(canBtn) ; setTitle("轉(zhuǎn)到指定行") ; setModal(true) ; //當(dāng)對(duì)話框彈出時(shí)母窗口不可編輯 setSize(270,130) ; setLocation(x/2-135,y/2-65) ; setResizable(false) ; setVisible(true) ; setDefaultCloseOperation(DISPOSE_ON_CLOSE) ; addWindowListener(new WindowAdapter(){ public void windowOpened(WindowEvent e){ isOpen = true ; } }) ; addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ isOpen = false ; } }) ; } } //轉(zhuǎn)到 goTo.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(!isOpen){ new GoToDialog() ; } } }); //全選 selectAll.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ txt.requestFocus(); txt.selectAll() ; } }); time.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String dateTime = null ; int pos = txt.getCaretPosition() ; dateTime = new SimpleDateFormat("hh:mm yyyy/MM/dd").format(new Date()) ; txt.insert(dateTime, pos); } }); //自動(dòng)換行 autoLineWrap.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(autoLineWrap.isSelected()){ txt.setLineWrap(true); }else{ txt.setLineWrap(false); } } }); //字體內(nèi)部類 class FontDialog extends JDialog{ private JLabel label1 = new JLabel("字體(F):") ; private JLabel label2 = new JLabel("字形(Y):") ; private JLabel label3 = new JLabel("大小(S):") ; private JLabel instns = new JLabel("中文示例AaBaCc",JLabel.CENTER) ; private JTextField field1 = new JTextField() ; private JTextField field2 = new JTextField() ; private JTextField field3 = new JTextField() ; private String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames() ; private JScrollPane scr1 = new JScrollPane() ; private JScrollPane scr2 = new JScrollPane() ; private JScrollPane scr3 = new JScrollPane() ; private JList fontList = null ; private JList fStyleList = null ; private JList fSizeList = null ; private JButton okBtn = new JButton("確定") ; private JButton cancBtn = new JButton("取消") ; //示例的顯示 private String selectedFont = "Fixedsys"; private int selectedStyle = Font.PLAIN; private float selectedSize = 16; public FontDialog() { fontList = new JList(fonts) ; //fontStyle String style[] = {"常規(guī)","傾斜","粗體","傾斜 粗體"} ; fStyleList = new JList(style) ; //fontSize String size[] = {"8","9","10","11","12","14","16","18","20","22","24", "26","28","36","48","72","初號(hào)","小號(hào)","一號(hào)","小一","二號(hào)", "小二","三號(hào)","小三","四號(hào)","小四","五號(hào)","六號(hào)","小六","七號(hào)","八號(hào)"} ; fSizeList = new JList(size) ; //Jlist中一次只能選擇一個(gè)選項(xiàng) fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ; fStyleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ; fSizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ; scr1.add(fontList) ; scr2.add(fStyleList) ; scr3.add(fSizeList) ; scr1.setViewportView(fontList); scr2.setViewportView(fStyleList); scr3.setViewportView(fSizeList); okBtn.setBounds(250,450,80,30) ; cancBtn.setBounds(340,450,80,30) ; label1.setBounds(20,20,50,20) ; label2.setBounds(205,20,50,20) ; label3.setBounds(350,20,50,20) ; instns.setBounds(205,280,215,80) ; instns.setBorder(BorderFactory.createTitledBorder("示例")) ; field1.setBounds(20,40,170,20) ; field2.setBounds(205,40,130,20) ; field3.setBounds(350,40,70,20) ; scr1.setBounds(20,60,170,170) ; scr2.setBounds(205,60,130,170) ; scr3.setBounds(350,60,70,150) ; scr1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) ; scr2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) ; scr3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) ; //文本框1 field1.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ int count = 0 ; //文本框中的字符數(shù) String str = null ; //保存輸入到文本框中的字符 int size = fontList.getModel().getSize() ; //fontList中的文本個(gè)數(shù) str = field1.getText()+e.getKeyChar()+"" ; count = str.length() ; for(int i=0; i=count){ //判斷輸入的是否與JList中的內(nèi)容部分匹配(忽略大小寫) if(fontList.getModel().getElementAt(i).substring(0, count).compareToIgnoreCase(str)==0){ fontList.ensureIndexIsVisible(size-i>=10 ? i+9 : size-1); if(fontList.getModel().getElementAt(i).compareToIgnoreCase(str)==0){ fontList.setSelectedIndex(i); } break ; } else{ fontList.ensureIndexIsVisible(0); fontList.clearSelection(); } } } } }); //文本框2 field2.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ int count = 0 ; //文本框中的字符數(shù) String str = null ; //保存輸入到文本框中的字符 int size = fStyleList.getModel().getSize() ; //fontList中的文本個(gè)數(shù) str = field2.getText()+e.getKeyChar()+"" ; count = str.length() ; for(int i=0; i=count){ //判斷輸入的是否與JList中的內(nèi)容部分匹配(忽略大小寫) if(fStyleList.getModel().getElementAt(i).substring(0, count).compareToIgnoreCase(str)==0){ if(fStyleList.getModel().getElementAt(i).compareToIgnoreCase(str)==0){ fStyleList.setSelectedIndex(i); } break ; } else{ fStyleList.clearSelection(); } } } } }); //文本框3 field3.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ int count = 0 ; //文本框中的字符數(shù) String str = null ; //保存輸入到文本框中的字符 int size = fSizeList.getModel().getSize() ; //fontList中的文本個(gè)數(shù) str = field3.getText()+e.getKeyChar()+"" ; count = str.length() ; for(int i=0; i=count){ //判斷輸入的是否與JList中的內(nèi)容部分匹配(忽略大小寫) if(fSizeList.getModel().getElementAt(i).substring(0, count).compareToIgnoreCase(str)==0){ fSizeList.ensureIndexIsVisible(size-i>=9 ? i+8 : size-1); if(fSizeList.getModel().getElementAt(i).compareToIgnoreCase(str)==0){ fSizeList.setSelectedIndex(i); } break ; } else{ fSizeList.ensureIndexIsVisible(0); fSizeList.clearSelection(); } } } } }); //設(shè)置示例中的文本字體樣式 //設(shè)置字形與字號(hào)對(duì)照表 final Map map = new HashMap() ; map.put("常規(guī)", (float) Font.PLAIN) ; map.put("傾斜", (float) Font.ITALIC) ; map.put("粗體", (float) Font.BOLD) ; map.put("傾斜 粗體", (float) (Font.ITALIC+Font.BOLD)) ; map.put("初號(hào)", 42f) ; map.put("小號(hào)", 36f) ; map.put("一號(hào)", 26f) ; map.put("小一", 24f) ; map.put("二號(hào)", 22f) ; map.put("小二", 18f) ; map.put("三號(hào)", 16f) ; map.put("小三", 15f) ; map.put("四號(hào)", 14f) ; map.put("小四", 12f) ; map.put("五號(hào)", 10.5f) ; map.put("六號(hào)", 7.5f) ; map.put("小六", 6.5f) ; map.put("七號(hào)", 5.5f) ; map.put("八號(hào)", 5f) ; //字體列表監(jiān)聽事件 fontList.addListSelectionListener(new ListSelectionListener(){ @Override public void valueChanged(ListSelectionEvent e) { String txtFont = txt.getFont().getName() ; //獲取文本中的字體 selectedFont = fontList.isSelectionEmpty() ? txtFont :fontList.getSelectedValue() ; instns.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize)); } }) ; //字體樣式監(jiān)聽事件 fStyleList.addListSelectionListener(new ListSelectionListener(){ @Override public void valueChanged(ListSelectionEvent e) { int txtStyle = txt.getFont().getStyle() ; //獲取文本中的字體 selectedStyle = (int) (fStyleList.isSelectionEmpty() ? txtStyle :map.get(fStyleList.getSelectedValue())) ; instns.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize)); } }) ; //字體大小監(jiān)聽 fSizeList.addListSelectionListener(new ListSelectionListener(){ public void valueChanged(ListSelectionEvent e){ int txtSize = txt.getFont().getSize() ; if(!fSizeList.isSelectionEmpty()){ String temp = fSizeList.getSelectedValue() ; if(temp.matches("\\d+")){ selectedSize = Integer.parseInt(temp) ; }else{ selectedSize = map.get(fSizeList.getSelectedValue()) ; } } instns.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize)); } }); //確定按鈕 okBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ txt.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize)); isOpen = false ; dispose() ; } }); //取消按鈕 cancBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dispose() ; isOpen = false ; } }); /*class MyRender extends DefaultListCellRenderer{ public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus){ String font = value.toString() ; setFont(new Font(font,Font.PLAIN,12)) ; return this ; } }*/ setLayout(null) ; add(label1) ; add(label2) ; add(label3) ; add(instns) ; add(field1) ; add(field2) ; add(field3) ; add(scr1) ; add(scr2) ; add(scr3) ; add(okBtn) ; add(cancBtn) ; setModal(true) ; //當(dāng)對(duì)話框彈出時(shí)母窗口不可編輯 setSize(440,530) ; setLocation(x/2-220,y/2-265) ; setResizable(false) ; setVisible(true) ; setDefaultCloseOperation(DISPOSE_ON_CLOSE) ; addWindowListener(new WindowAdapter(){ public void windowOpened(WindowEvent e){ isOpen = true ; } }) ; addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ isOpen = false ; } }) ; } } //字體 font.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(!isOpen){ new FontDialog() ; } } }); //查看幫助 checkHelp.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JOptionPane.showMessageDialog(null, "與Windows系統(tǒng)下的幫助相似", "幫助", JOptionPane.CLOSED_OPTION); } }); //關(guān)于 about.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JOptionPane.showMessageDialog(null, "仿Windows記事本,初學(xué)Java的練手作品", "關(guān)于", JOptionPane.CLOSED_OPTION); } }); //右鍵彈出菜單內(nèi)部類 class popupListener extends MouseAdapter{ private JPopupMenu popup = null ; public popupListener(JPopupMenu popup){ this.popup = popup ; } public void mouseReleased(MouseEvent e){ showPopupMenu(e) ; } public void mouseClicked(MouseEvent e){ showPopupMenu(e) ; } private void showPopupMenu(MouseEvent e) { if (e.isPopupTrigger()) { //右鍵彈出菜單 jpm.add(undo) ; jpm.add(cut) ; jpm.add(copy) ; jpm.add(delete) ; jpm.add(find) ; jpm.add(replace) ; jpm.add(goTo) ; jpm.add(selectAll) ; jpm.add(time) ; popup.show(e.getComponent(), e.getX(), e.getY()); } } } //右鍵彈出菜單 txt.addMouseListener(new popupListener(jpm)) ; //設(shè)置快捷鍵 newFile.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.event.InputEvent.CTRL_DOWN_MASK)); open.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.event.InputEvent.CTRL_DOWN_MASK)); save.setAccelerator(KeyStroke.getKeyStroke('S',java.awt.event.InputEvent.CTRL_DOWN_MASK)); undo.setAccelerator(KeyStroke.getKeyStroke('Z',java.awt.event.InputEvent.CTRL_DOWN_MASK)); cut.setAccelerator(KeyStroke.getKeyStroke('X',java.awt.event.InputEvent.CTRL_DOWN_MASK)); copy.setAccelerator(KeyStroke.getKeyStroke('C',java.awt.event.InputEvent.CTRL_DOWN_MASK)); paste.setAccelerator(KeyStroke.getKeyStroke('V',java.awt.event.InputEvent.CTRL_DOWN_MASK)); find.setAccelerator(KeyStroke.getKeyStroke('F',java.awt.event.InputEvent.CTRL_DOWN_MASK)); replace.setAccelerator(KeyStroke.getKeyStroke('H',java.awt.event.InputEvent.CTRL_DOWN_MASK)); goTo.setAccelerator(KeyStroke.getKeyStroke('G',java.awt.event.InputEvent.CTRL_DOWN_MASK)); selectAll.setAccelerator(KeyStroke.getKeyStroke('A',java.awt.event.InputEvent.CTRL_DOWN_MASK)); time.setAccelerator((KeyStroke) KeyStroke.getAWTKeyStroke((char) KeyEvent.VK_F5)); //設(shè)置助記鍵 file.setMnemonic('F'); edit.setMnemonic('E'); format.setMnemonic('O'); view.setMnemonic('V'); help.setMnemonic('H'); newFile.setMnemonic('N'); open.setMnemonic('O'); save.setMnemonic('S'); exit.setMnemonic('X'); undo.setMnemonic('U'); cut.setMnemonic('T'); copy.setMnemonic('C'); paste.setMnemonic('P'); delete.setMnemonic('L'); find.setMnemonic('F'); replace.setMnemonic('R'); goTo.setMnemonic('G'); selectAll.setMnemonic('A'); time.setMnemonic('D'); font.setMnemonic('F'); autoLineWrap.setMnemonic('W'); state.setMnemonic('S'); checkHelp.setMnemonic('H'); about.setMnemonic('A'); txt.setFont(new Font("Fixedsys",Font.PLAIN,16)); txt.setEditable(true); file.add(newFile) ; file.add(open) ; file.add(save) ; file.addSeparator(); file.add(exit) ; edit.add(undo) ; edit.addSeparator(); edit.add(cut) ; edit.add(copy) ; edit.add(paste) ; edit.add(delete) ; edit.addSeparator(); edit.add(find) ; edit.add(replace) ; edit.add(goTo) ; edit.addSeparator(); edit.add(selectAll) ; edit.add(time) ; format.add(autoLineWrap) ; format.add(font) ; view.add(state) ; help.add(checkHelp) ; help.addSeparator(); help.add(about) ; mb.add(file) ; mb.add(edit) ; mb.add(format) ; mb.add(view) ; mb.add(help) ; setJMenuBar(mb) ; add(mp) ; add(new JScrollPane(txt)) ; setVisible(true) ; setSize(530,640) ; setLocation(x/2-265,y/2-320); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ; } }
package org.mfy.notepad; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class Notepad { public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } new MyNotepad() ; } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。