Java小程式設計--Note記事本
阿新 • • 發佈:2019-01-08
import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.GroupLayout.Alignment; public class MyNotePad implements ActionListener { private JFrame frame = new JFrame("NewNote"); private JTextArea jta = new JTextArea(); private String result = ""; /* File is a new file? */ private boolean flag = true; private File f; /* Find or Replease Dialog */ private JButton jb = new JButton("Start"); private JTextField jtf = new JTextField(5); private JTextField jt = new JTextField(5); private JButton jbt = new JButton("Replace AS"); private JButton jba = new JButton("Replace All"); private String value; private int start = 0; private JFrame jf = new JFrame("Find"); private JFrame jfc = new JFrame("Replace"); @Override public void actionPerformed(ActionEvent e) { String comm = e.getActionCommand(); /* If file is new */ if ("New".equals(comm)) { New(); } else if ("Open".equals(comm)) { Open(); } else if ("Save".equals(comm)) { Save(); } else if ("Save As".equals(comm)) { Save_As(); } else if ("Exit".equals(comm)) { ExitJudge(); } else if ("Undo".equals(comm)) { jta.setText(value); } else if ("Cut".equals(comm)) { value = jta.getText(); jta.cut(); } else if ("Copy".equals(comm)) { jta.copy(); } else if ("Paste".equals(comm)) { value = jta.getText(); jta.paste(); } else if ("Delete".equals(comm)) { value = jta.getText(); jta.replaceSelection(null); } else if ("Select all".equals(comm)) { jta.selectAll(); } else if ("Find".equals(comm)) { Find(); } else if ("Replace".equals(comm)) {/* menuitem */ Replace(); } else if ("Version".equals(comm)) { Version(); } else if ("Start".equals(comm) || "Next".equals(comm)) { StartNextButton(); } else if ("Replace AS".equals(comm)) {/* buttron */ ReplaceAs(); } else if ("Replace All".equals(comm)) {/* buttron */ String temp = jta.getText(); temp = temp.replaceAll(jtf.getText(), jt.getText()); jta.setText(temp); } else if ("Auto Wrap".equals(comm)) { if (!jta.getLineWrap()) jta.setLineWrap(true);// 自動換行 else { jta.setLineWrap(false); } } } /* ExitJudge */ private void ExitJudge() { if (flag) { int returnVal = JOptionPane.showConfirmDialog(null, "Doesn't save this new file!!\r\nExit??"); if (returnVal == JOptionPane.OK_OPTION)/* select the OK button */ { Save(); System.exit(0); } else if (returnVal == JOptionPane.NO_OPTION) { /* select the NO button */ System.exit(0); } else { /* select the cancle button */ frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); } } } /* Replace As */ private void ReplaceAs() { String temp = jtf.getText(); int s = value.indexOf(temp, start); if (value.indexOf(temp, start) != -1) { jta.setSelectionStart(s); jta.setSelectionEnd(s + temp.length()); jta.setSelectedTextColor(Color.GREEN); start = s + 1; jta.replaceSelection(jt.getText()); } else { JOptionPane.showMessageDialog(jf, "Find Over!", "Tips", 0); jf.dispose(); } } /* StartNextButton */ private void StartNextButton() { String temp = jtf.getText(); jb.setText("Start"); if (!temp.equals("")) { int s = value.indexOf(temp, start); if (value.indexOf(temp, start) != -1) { jta.setSelectionStart(s); jta.setSelectionEnd(s + temp.length()); jta.setSelectedTextColor(Color.GREEN); start = s + 1; jb.setText("Next"); // value=value.substring(s+temp.length());//不能擷取字串 } else { JOptionPane.showMessageDialog(jf, "Find Over!", "Tips", 0); /* reset the cursor to index 0 */ jta.setCaretPosition(0); start = 0; jf.dispose(); } } else { JOptionPane.showMessageDialog(null, "Text is null"); jf.dispose(); } } /* start the text_find from */ private void Find() { value = jta.getText(); if (!value.equals("")) { jf.add(jtf, BorderLayout.CENTER); jf.add(jb, BorderLayout.SOUTH); jf.setLocation(630, 300); jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } else { JOptionPane.showMessageDialog(null, "Text is null!!"); } } /* Version */ private void Version() { JDialog jd = new JDialog(frame, "Version"); /* tips */ JLabel label = new JLabel("Designed By ZKJ!!!"); /* tips' font */ label.setFont(new Font("微軟雅黑", Font.PLAIN, 25)); /* text center */ label.setHorizontalAlignment(JTextField.CENTER); jd.add(label, BorderLayout.CENTER); jd.setLocation(600, 350); jd.setSize(300, 100); jd.setVisible(true); // jd.pack(); /* JDialog.DISPOSE_ON_CLOSE */ jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); } /* start the text_replace from */ /* label */ JLabel jl1 = new JLabel("Content:"); JLabel jl2 = new JLabel("Replace As:"); JLabel jl3 = new JLabel(); JLabel jl4 = new JLabel(); private void Replace() { value = jta.getText(); jfc.setLayout(new GridLayout(3, 3)); /* add */ jfc.add(jl1); jfc.add(jtf); jfc.add(jb); jfc.add(jl2); jfc.add(jt); jfc.add(jbt); jfc.add(jl3); jfc.add(jl4); jfc.add(jba); jfc.setLocation(570, 300); jfc.pack(); jfc.setVisible(true); /* JDialog.DISPOSE_ON_CLOSE */ jfc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } /* new */ private void New() { /* If there exits a file */ if (!(frame.getTitle().equals("NewNote"))) { /* If this file doesn't save */ if (!flag) { write(); newNew(); } else { JFileChooser jfc = new JFileChooser("D:\\javaNote"); int returnVal = jfc.showDialog(null, "Save As"); if (returnVal == JFileChooser.APPROVE_OPTION) { f = jfc.getSelectedFile(); flag = false; write(); } } } else if (!(jta.getText().isEmpty())) { JFileChooser jfc = new JFileChooser("D:\\javaNote"); int returnVal = jfc.showDialog(null, "Save"); if (returnVal == JFileChooser.APPROVE_OPTION) { f = jfc.getSelectedFile(); flag = false; write(); newNew(); } } else { newNew(); } } /* open */ private void Open() { JFileChooser jfc = new JFileChooser("D:\\javaNote"); jfc.setDialogType(JFileChooser.OPEN_DIALOG); int returnVal = jfc.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { f = jfc.getSelectedFile(); /* set frame title */ frame.setTitle(f.getName()); result = read(); flag = false; value = result; jta.setText(result); } } /* save as */ private void Save_As() { JFileChooser jfc = new JFileChooser("D:\\javaNote"); int returnVal = jfc.showDialog(null, "Save As"); if (returnVal == JFileChooser.APPROVE_OPTION) { f = jfc.getSelectedFile(); write(); } } /* save */ private void Save() { JFileChooser jfc = new JFileChooser("D:\\javaNote"); if (flag) { int returnVal = jfc.showDialog(null, "Save"); if (returnVal == JFileChooser.APPROVE_OPTION) { f = jfc.getSelectedFile(); flag = false; write(); } } else { write(); } } /* read text to programme */ public String read() { String temp = ""; try { FileInputStream fis = new FileInputStream(f.getAbsolutePath()); byte[] b = new byte[1024]; int num = fis.read(b); while (num != -1) { temp = temp + new String(b, 0, num); num = fis.read(b); } fis.close(); } catch (Exception e1) { e1.printStackTrace(); } return temp; } /* write text to file */ public void write() { try { FileOutputStream fos = new FileOutputStream(f); fos.write(jta.getText().getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } /* new file */ public void newNew() { /* release the old frame */ frame.dispose(); /* new another frame */ new MyNotePad(); /* set flag=true */ flag = true; } /* constructor */ public MyNotePad() { init(); } /* init the frame */ private void init() { JMenuBar jmb = addMenuToFrame(); frame.setJMenuBar(jmb); // jta.setLineWrap(true);// 自動換行 JScrollPane jsp = new JScrollPane(jta);// 滾動視窗面板 frame.add(jsp); jb.addActionListener(this); jbt.addActionListener(this); jba.addActionListener(this); // try { // UIManager // .setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); // } catch (Exception e) { // // e.printStackTrace(); // } try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (Exception e1) { e1.printStackTrace(); } /* Key Event */ addKeyEvent(); /* Window Event */ AddWinCloseEvent(); frame.setLocation(550, 200); frame.setSize(400, 400); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /* Window Event */ private void AddWinCloseEvent() { frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { ExitJudge(); } }); } /* Add KeyEvent */ private void addKeyEvent() { /* adapter */ jta.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_CONTROL | KeyEvent.VK_C:/* Ctrl+C */ jta.copy(); break; case KeyEvent.VK_CONTROL | KeyEvent.VK_V:/* Ctrl+V */ jta.paste(); break; case KeyEvent.VK_CONTROL | KeyEvent.VK_A:/* Ctrl+A */ jta.selectAll(); break; case KeyEvent.VK_DELETE: /* Delete */ value = jta.getText(); jta.replaceSelection(null); break; } /* Ctrl+ _ */ if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_N) newNew(); else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) { Save(); } else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_O) { Open(); } else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_F) { Find(); } else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_H) { Replace(); } else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_Z) { jta.setText(value); } } }); } /* add menubar to frame */ private JMenuBar addMenuToFrame() { JMenuBar jmb = new JMenuBar(); String[] menuLab = { "File", "Edit", "Font", "Help" }; String[][] menuItemLab = { { "New", "Open", "Save", "Save As", "Exit" }, { "Undo", "Cut", "Copy", "Paste", "Delete", "Select all", "Find", "Replace" }, { "Auto Wrap" }, { "Version" } }; /* add */ for (int i = 0; i < menuLab.length; i++) { JMenu menu = new JMenu(menuLab[i]); jmb.add(menu); for (int j = 0; j < menuItemLab[i].length; j++) { JMenuItem jmi = new JMenuItem(menuItemLab[i][j]); menu.add(jmi); jmi.addActionListener(this); } } return jmb; } /* test */ public static void main(String[] args) { new MyNotePad(); } }
/*這個記事本的主要難點就在於讀寫檔案,以及各種邏輯的控制,是否儲存為儲存的,是否退出....等等總之還是比較有意思而且有綜合運用File,swing等知識*/下面是執行的幾個截圖/*見諒一下,註釋用了一手不標準的Eng*/