程式—java記事本
阿新 • • 發佈:2018-12-30
全篇程式碼
package note2; import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.JScrollPane; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JRadioButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Font; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import javax.swing.event.CaretEvent; import javax.swing.JRadioButtonMenuItem; import javax.swing.JCheckBoxMenuItem; import javax.swing.JColorChooser; import javax.swing.JFileChooser; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; public class Main extends JFrame { private JTextArea write; private File cFile; private String copyText; private int start; private int end; public Main() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 927, 1090); JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); JMenuBar menuBar = new JMenuBar(); scrollPane.setColumnHeaderView(menuBar); JMenu fileMenu = new JMenu("檔案"); menuBar.add(fileMenu); JMenuItem open = new JMenuItem("開啟"); JFileChooser chooser = new JFileChooser(); open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); int value = chooser.showOpenDialog(Main.this); try { if (value == JFileChooser.APPROVE_OPTION) { chooser.setFileFilter(new FileNameExtensionFilter("可選檔案", "txt")); cFile = chooser.getSelectedFile(); BufferedReader br = new BufferedReader(new FileReader(cFile)); String thisLine; write.setText(""); while ((thisLine = br.readLine()) != null) { write.append(thisLine + "\r\n"); } br.close(); } } catch (Exception e2) { System.err.println("open " + e2); } } }); JMenuItem newfile = new JMenuItem("新建"); newfile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { cFile = null; write.setText(""); } }); fileMenu.add(newfile); fileMenu.add(open); JMenuItem save = new JMenuItem("儲存"); save.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { if (cFile == null) { return; } else { BufferedWriter bw = new BufferedWriter(new FileWriter(cFile)); bw.write(write.getText()); bw.close(); } } catch (Exception e2) { System.err.println("save " + e); } } }); fileMenu.add(save); JMenuItem saveToNewPlace = new JMenuItem("另存為"); saveToNewPlace.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int value = chooser.showSaveDialog(Main.this); try { if (value == JFileChooser.APPROVE_OPTION) { cFile = null; File file = chooser.getSelectedFile(); if (file.exists() == false) { file.createNewFile(); } BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(write.getText()); bw.close(); } } catch (Exception e2) { System.err.println("saveToNew " + e); } } }); fileMenu.add(saveToNewPlace); JMenuItem out = new JMenuItem("退出"); out.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); fileMenu.add(out); JMenu editMenu = new JMenu("編輯"); menuBar.add(editMenu); JMenuItem copy = new JMenuItem("複製"); copy.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { copy(); } }); editMenu.add(copy); JMenuItem deleteAndCopy = new JMenuItem("剪下"); deleteAndCopy.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (write.getSelectedText() != null) { copyText = write.getSelectedText(); delete(); } } }); editMenu.add(deleteAndCopy); JMenuItem zhan = new JMenuItem("貼上"); zhan.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { zhan(); } }); editMenu.add(zhan); JMenuItem delete= new JMenuItem("刪除"); delete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { delete(); } }); editMenu.add(delete); JMenuItem find = new JMenuItem("查詢"); find.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { find(); } }); editMenu.add(find); JMenuItem replace = new JMenuItem("替換"); replace.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { replace(); } }); editMenu.add(replace); JMenu textStyle = new JMenu("字型"); editMenu.add(textStyle); JCheckBoxMenuItem blod = new JCheckBoxMenuItem("Blod"); JCheckBoxMenuItem italic = new JCheckBoxMenuItem("italic"); blod.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if (blod.isSelected()) { if (italic.isSelected()) { write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20)); } else { write.setFont(new Font("Arial", Font.BOLD, 20)); } } else { if (italic.isSelected()) { write.setFont(new Font("Arial", Font.ITALIC, 20)); } else { write.setFont(new Font("Arial", Font.PLAIN, 20)); } } } }); textStyle.add(blod); italic.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if (italic.isSelected()) { if (blod.isSelected()) { write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20)); }else { write.setFont(new Font("Arial", Font.ITALIC, 20)); } } else { if (blod.isSelected()) { write.setFont(new Font("Arial", Font.BOLD, 20)); }else { write.setFont(new Font("Arial", Font.PLAIN, 20)); } } } }); textStyle.add(italic); JMenu color = new JMenu("Color"); menuBar.add(color); ButtonGroup bg = new ButtonGroup(); JRadioButtonMenuItem black = new JRadioButtonMenuItem("black"); black.setSelected(true); black.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { write.setForeground(Color.black); } }); color.add(black); JRadioButtonMenuItem red = new JRadioButtonMenuItem("red"); red.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { write.setForeground(Color.red); } }); color.add(red); JRadioButtonMenuItem blue = new JRadioButtonMenuItem("blue"); blue.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { write.setForeground(Color.blue); } }); color.add(blue); JRadioButtonMenuItem green = new JRadioButtonMenuItem("green"); green.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { write.setForeground(Color.green); } }); color.add(green); bg.add(red); bg.add(green); bg.add(blue); bg.add(black); JMenuItem other = new JMenuItem("others..."); other.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JColorChooser jc = new JColorChooser(write.getForeground()); Color be = write.getForeground(); Color co = write.getForeground(); co = jc.showDialog(null, "請選擇顏色", co); if (co == null) { write.setForeground(be); } else { bg.clearSelection(); write.setForeground(co); } } }); color.add(other); JScrollPane text = new JScrollPane(); scrollPane.setViewportView(text); write = new JTextArea(); write.setFont(new Font("Arial", Font.PLAIN, 20)); text.setViewportView(write); } public void CaretUpdate(CaretEvent e) { start = e.getDot(); end = e.getMark(); int temp = start; if (start > end) { start = end; end = temp; } } private void copy(){ copyText = write.getSelectedText(); } private void zhan(){ if (copyText != null) { StringBuffer sb = new StringBuffer(write.getText().toString()); String s1 = sb.substring(0, write.getSelectionStart()); String s2 = sb.substring(write.getSelectionEnd()); write.setText(s1); write.append(copyText); write.append(s2); } } private void delete(){ if (write.getSelectedText() != null) { StringBuffer sb = new StringBuffer(write.getText().toString()); String s1 = sb.substring(0, write.getSelectionStart()); String s2 = sb.substring(write.getSelectionEnd()); write.setText(s1); write.append(s2); } } private void find(){ EventQueue.invokeLater(new Runnable() { public void run() { try { Find frame = new Find(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } private void replace(){ EventQueue.invokeLater(new Runnable() { public void run() { try { Replace frame = new Replace(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Main frame = new Main(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } class Find extends JFrame { private JPanel contentPane; private JTextField textField; private boolean isDown; private int start; private int last; /** * Create the frame. */ public Find() { setResizable(false); setAlwaysOnTop(true); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setBounds(100, 100, 650, 250); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); ButtonGroup bg = new ButtonGroup(); JRadioButton up = new JRadioButton("向上"); up.setBounds(159, 99, 177, 29); contentPane.add(up); bg.add(up); JRadioButton down = new JRadioButton("向下"); down.setSelected(true); isDown = true; down.setBounds(159, 137, 177, 29); contentPane.add(down); bg.add(down); textField = new JTextField(); textField.setBounds(97, 45, 345, 27); contentPane.add(textField); textField.setColumns(10); down.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (down.isSelected()) { isDown = true; } else { isDown = false; } } }); JButton search = new JButton("查詢"); search.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) { start = write.getSelectionStart(); last = write.getSelectionEnd(); } if (isDown == true) { String text = textField.getText().toString(); start = write.getText().toString().indexOf(text, last); if (start != -1) { write.setSelectionStart(start); write.setSelectionEnd(start + text.length()); } }else{ String text = textField.getText().toString(); start = write.getText().toString().lastIndexOf(text,start-1); if (start != -1) { write.setSelectionStart(start); write.setSelectionEnd(start+text.length()); } } } }); search.setBounds(466, 44, 123, 29); contentPane.add(search); } } class Replace extends JFrame { private JPanel contentPane; private JTextField target; private JTextField retext; private boolean isDown; private int start; private int last; public Replace() { System.out.println("replace"); setResizable(false); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setBounds(100, 100, 650, 250); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); isDown = true; JButton findNext = new JButton("查詢下一個"); findNext.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) { start = write.getSelectionStart(); last = write.getSelectionEnd(); } if (isDown == true) { String text = target.getText().toString(); start = write.getText().toString().indexOf(text, last); if (start != -1) { write.setSelectionStart(start); write.setSelectionEnd(start + text.length()); } }else{ String text = target.getText().toString(); start = write.getText().toString().lastIndexOf(text,start-1); if (start != -1) { write.setSelectionStart(start); write.setSelectionEnd(start+text.length()); } } } }); findNext.setBounds(441, 50, 123, 29); contentPane.add(findNext); JButton replace = new JButton("替換"); replace.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try{ if (write.getSelectedText().toString().equals(target.getText().toString())) { System.out.println("pipei"); StringBuffer sb = new StringBuffer(write.getText().toString()); String s1 = sb.substring(0, write.getSelectionStart()); String s2 = sb.substring(write.getSelectionEnd()); write.setText(s1); write.append(retext.getText().toString()); write.append(s2); } }catch (Exception sd) { } } }); replace.setBounds(441, 109, 123, 29); contentPane.add(replace); target = new JTextField(); target.setBounds(110, 51, 290, 27); contentPane.add(target); target.setColumns(10); JLabel li = new JLabel("目標文字"); li.setBounds(14, 54, 81, 21); contentPane.add(li); JLabel li2 = new JLabel("替換文字"); li2.setBounds(14, 113, 81, 21); contentPane.add(li2); retext = new JTextField(); retext.setBounds(110, 110, 290, 27); contentPane.add(retext); retext.setColumns(10); ButtonGroup bg = new ButtonGroup(); JRadioButton up = new JRadioButton("向上"); up.setBounds(113, 170, 81, 29); contentPane.add(up); JRadioButton down = new JRadioButton("向下"); down.setSelected(true); down.setBounds(219, 170, 88, 29); contentPane.add(down); bg.add(up); bg.add(down); down.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (down.isSelected()) { isDown = true; }else{ isDown = false; } } }); JButton replaceall = new JButton("全部替換"); replaceall.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) { start = write.getSelectionStart(); last = write.getSelectionEnd(); } try{ if (write.getSelectedText().toString().equals(target.getText().toString())) { System.out.println("pipei"); StringBuffer sb = new StringBuffer(write.getText().toString()); String s1 = sb.substring(0, write.getSelectionStart()); String s2 = sb.substring(write.getSelectionEnd()); write.setText(s1); write.append(retext.getText().toString()); write.append(s2); } }catch (Exception sd) { } while(start != -1){ System.out.println("ahah"); if (isDown == true) { String text = target.getText().toString(); start = write.getText().toString().indexOf(text, last); if (start != -1) { write.setSelectionStart(start); write.setSelectionEnd(start + text.length()); } }else{ String text = target.getText().toString(); start = write.getText().toString().lastIndexOf(text,start-1); if (start != -1) { write.setSelectionStart(start); write.setSelectionEnd(start+text.length()); } } try{ if (write.getSelectedText().toString().equals(target.getText().toString())) { System.out.println("pipei"); StringBuffer sb = new StringBuffer(write.getText().toString()); String s1 = sb.substring(0, write.getSelectionStart()); String s2 = sb.substring(write.getSelectionEnd()); write.setText(s1); write.append(retext.getText().toString()); write.append(s2); } }catch (Exception sd) { } } } }); replaceall.setBounds(441, 170, 123, 29); contentPane.add(replaceall); } } }