Java课程设计——Java记事本
借鉴了网上的一些代码,这是源码,可直接拿去运行。
package notepad;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.undo.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;
public class Notepad extends JFrame implements ActionListener, DocumentListener{
JMenu fileMenu, editMenu, formatMenu, viewMenu, helpMenu;
JPopupMenu popupMenu;
JMenuItem popupMenu_Undo, popupMenu_Cut, popupMenu_Copy, popupMenu_Paste, popupMenu_Delete, popupMenu_SelectAll;
JMenuItem fileMenu_New, fileMenu_Open, fileMenu_Save, fileMenu_SaveAs, fileMenu_PageSetUp, fileMenu_Print,
fileMenu_Exit;
JMenuItem editMenu_Undo, editMenu_Cut, editMenu_Copy, editMenu_Paste, editMenu_Delete, editMenu_Find,
editMenu_FindNext, editMenu_Replace, editMenu_GoTo, editMenu_SelectAll, editMenu_TimeDate;
JCheckBoxMenuItem formatMenu_LineWrap;
JMenuItem formatMenu_Font;
JCheckBoxMenuItem viewMenu_Status;
JMenuItem helpMenu_HelpTopics, helpMenu_AboutNotepad;
JTextArea editArea;
JLabel statusLabel;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Clipboard clipBoard = toolkit.getSystemClipboard();
protected UndoManager undo = new UndoManager();
String oldValue;
boolean isNewFile = true;
File currentFile;
public Notepad() {
super("Java记事本");
Font font = new Font("Dialog", Font.PLAIN, 12);
Enumeration keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof javax.swing.plaf.FontUIResource) {
UIManager.put(key, font);
}
}
JMenuBar menuBar = new JMenuBar();
fileMenu = new JMenu("文件(F)");
fileMenu.setMnemonic('F');
fileMenu_New = new JMenuItem("新建(N)");
fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
fileMenu_New.addActionListener(this);
fileMenu_Open = new JMenuItem("打开(O)...");
fileMenu_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
fileMenu_Open.addActionListener(this);
fileMenu_Save = new JMenuItem("保存(S)");
fileMenu_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
fileMenu_Save.addActionListener(this);
fileMenu_SaveAs = new JMenuItem("另存为(A)...");
fileMenu_SaveAs.addActionListener(this);
fileMenu_Exit = new JMenuItem("退出(X)");
fileMenu_Exit.addActionListener(this);
menuBar.add(fileMenu);
fileMenu.add(fileMenu_New);
fileMenu.add(fileMenu_Open);
fileMenu.add(fileMenu_Save);
fileMenu.add(fileMenu_SaveAs);
fileMenu.addSeparator();
fileMenu.add(fileMenu_Exit);
editMenu = new JMenu("编辑(E)");
editMenu.setMnemonic('E');
editMenu.addMenuListener(new MenuListener() {
public void menuCanceled(MenuEvent e){
checkMenuItemEnabled();
}
public void menuDeselected(MenuEvent e){
checkMenuItemEnabled();
}
public void menuSelected(MenuEvent e){
checkMenuItemEnabled();
}
});
editMenu_Undo = new JMenuItem("撤销(U)");
editMenu_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
editMenu_Undo.addActionListener(this);
editMenu_Undo.setEnabled(false);
editMenu_Cut = new JMenuItem("剪切(T)");
editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
editMenu_Cut.addActionListener(this);
editMenu_Copy = new JMenuItem("复制(C)");
editMenu_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
editMenu_Copy.addActionListener(this);
editMenu_Paste = new JMenuItem("粘贴(P)");
editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
editMenu_Paste.addActionListener(this);
editMenu_Delete = new JMenuItem("删除(D)");
editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
editMenu_Delete.addActionListener(this);
editMenu_Find = new JMenuItem("查找(F)...");
editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
editMenu_Find.addActionListener(this);
editMenu_FindNext = new JMenuItem("查找下一个(N)");
editMenu_FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
editMenu_FindNext.addActionListener(this);
editMenu_Replace = new JMenuItem("替换(R)...", 'R');
editMenu_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK));
editMenu_Replace.addActionListener(this);
editMenu_SelectAll = new JMenuItem("全选", 'A');
editMenu_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
editMenu_SelectAll.addActionListener(this);
menuBar.add(editMenu);
editMenu.add(editMenu_Undo);
editMenu.addSeparator();
editMenu.add(editMenu_Cut);
editMenu.add(editMenu_Copy);
editMenu.add(editMenu_Paste);
editMenu.add(editMenu_Delete);
editMenu.addSeparator();
editMenu.add(editMenu_Find);
editMenu.add(editMenu_FindNext);
editMenu.add(editMenu_Replace);
editMenu.addSeparator();
editMenu.add(editMenu_SelectAll);
formatMenu = new JMenu("格式(O)");
formatMenu.setMnemonic('O');
formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)");
formatMenu_LineWrap.setMnemonic('W');
formatMenu_LineWrap.setState(true);
formatMenu_LineWrap.addActionListener(this);
formatMenu_Font = new JMenuItem("字体(F)...");
formatMenu_Font.addActionListener(this);
menuBar.add(formatMenu);
formatMenu.add(formatMenu_LineWrap);
formatMenu.add(formatMenu_Font);
viewMenu = new JMenu("查看(V)");
viewMenu.setMnemonic('V');
viewMenu_Status = new JCheckBoxMenuItem("状态栏(S)");
viewMenu_Status.setMnemonic('S');
viewMenu_Status.setState(true);
viewMenu_Status.addActionListener(this);
menuBar.add(viewMenu);
viewMenu.add(viewMenu_Status);
helpMenu = new JMenu("帮助(H)");
helpMenu.setMnemonic('H');
helpMenu_HelpTopics = new JMenuItem("帮助主题(H)");
helpMenu_HelpTopics.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
helpMenu_HelpTopics.addActionListener(this);
menuBar.add(helpMenu);
helpMenu.add(helpMenu_HelpTopics);
this.setJMenuBar(menuBar);
editArea = new JTextArea(30, 80);
JScrollPane scroller = new JScrollPane(editArea);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(scroller, BorderLayout.CENTER);
editArea.setWrapStyleWord(true);
editArea.setLineWrap(true);
oldValue = editArea.getText();
editArea.getDocument().addUndoableEditListener(undo);
editArea.getDocument().addDocumentListener(this);
popupMenu = new JPopupMenu();
popupMenu_Undo = new JMenuItem("撤销(U)");
popupMenu_Cut = new JMenuItem("剪切(T)");
popupMenu_Copy = new JMenuItem("复制(C)");
popupMenu_Paste = new JMenuItem("粘帖(P)");
popupMenu_Delete = new JMenuItem("删除(D)");
popupMenu_SelectAll = new JMenuItem("全选(A)");
popupMenu.add(popupMenu_Undo);
popupMenu.addSeparator();
popupMenu.add(popupMenu_Cut);
popupMenu.add(popupMenu_Copy);
popupMenu.add(popupMenu_Paste);
popupMenu.add(popupMenu_Delete);
popupMenu.addSeparator();
popupMenu.add(popupMenu_SelectAll);
popupMenu_Undo.addActionListener(this);
popupMenu_Cut.addActionListener(this);
popupMenu_Copy.addActionListener(this);
popupMenu_Paste.addActionListener(this);
popupMenu_Delete.addActionListener(this);
popupMenu_SelectAll.addActionListener(this);
editArea.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()){
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
checkMenuItemEnabled();
editArea.requestFocus();
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()){
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
checkMenuItemEnabled();
editArea.requestFocus();
}
});
statusLabel = new JLabel("按F1获取帮助");
this.add(statusLabel, BorderLayout.SOUTH);
this.setLocation(100, 100);
this.setSize(800, 600);
this.setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
exitWindowChoose();
}
});
checkMenuItemEnabled();
editArea.requestFocus();
}
public void checkMenuItemEnabled() {
String selectText = editArea.getSelectedText();
if (selectText == null) {
editMenu_Cut.setEnabled(false);
popupMenu_Cut.setEnabled(false);
editMenu_Copy.setEnabled(false);
popupMenu_Copy.setEnabled(false);
editMenu_Delete.setEnabled(false);
popupMenu_Delete.setEnabled(false);
} else {
editMenu_Cut.setEnabled(true);
popupMenu_Cut.setEnabled(true);
editMenu_Copy.setEnabled(true);
popupMenu_Copy.setEnabled(true);
editMenu_Delete.setEnabled(true);
popupMenu_Delete.setEnabled(true);
}
Transferable contents = clipBoard.getContents(this);
if (contents == null) {
editMenu_Paste.setEnabled(false);
popupMenu_Paste.setEnabled(false);
} else {
editMenu_Paste.setEnabled(true);
popupMenu_Paste.setEnabled(true);
}
}
public void exitWindowChoose() {
editArea.requestFocus();
String currentValue = editArea.getText();
if (currentValue.equals(oldValue) == true) {
System.exit(0);
} else {
int exitChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "退出提示",
JOptionPane.YES_NO_CANCEL_OPTION);
if (exitChoose == JOptionPane.YES_OPTION) {
if (isNewFile) {
String str = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("文件另存为……");
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
return;
}
File saveFileName = fileChooser.getSelectedFile();
if (saveFileName == null || saveFileName.getName().equals("")) {
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
} else {
try {
FileWriter fw = new FileWriter(saveFileName);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(editArea.getText(), 0, editArea.getText().length());
bfw.flush();
fw.close();
isNewFile = false;
currentFile = saveFileName;
oldValue = editArea.getText();
this.setTitle(saveFileName.getName() + " - 记事本");
statusLabel.setText(" 当前打开文件:" + saveFileName.getAbsoluteFile());
} catch (IOException ioException) {
}
}
} else {
try {
FileWriter fw = new FileWriter(currentFile);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(editArea.getText(), 0, editArea.getText().length());
bfw.flush();
fw.close();
} catch (IOException ioException) {
}
}
System.exit(0);
} else if (exitChoose == JOptionPane.NO_OPTION) {
System.exit(0);
} else {
return;
}
}
}
public void find() {
final JDialog findDialog = new JDialog(this, "查找", false);
Container con = findDialog.getContentPane();
con.setLayout(new FlowLayout(FlowLayout.LEFT));
JLabel findContentLabel = new JLabel("查找内容(N):");
final JTextField findText = new JTextField(15);
JButton findNextButton = new JButton("查找下一个(F):");
final JCheckBox matchCheckBox = new JCheckBox("区分大小写(C)");
ButtonGroup bGroup = new ButtonGroup();
final JRadioButton upButton = new JRadioButton("向上(U)");
final JRadioButton downButton = new JRadioButton("向下(D)");
downButton.setSelected(true);
bGroup.add(upButton);
bGroup.add(downButton);
JButton cancel = new JButton("取消");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
findDialog.dispose();
}
});
findNextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int k = 0, m = 0;
final String str1, str2, str3, str4, strA, strB;
str1 = editArea.getText();
str2 = findText.getText();
str3 = str1.toUpperCase();
str4 = str2.toUpperCase();
if (matchCheckBox.isSelected())
{
strA = str1;
strB = str2;
} else
{
strA = str3;
strB = str4;
}
if (upButton.isSelected()) {
if (editArea.getSelectedText() == null)
k = strA.lastIndexOf(strB, editArea.getCaretPosition() - 1 );
else
k = strA.lastIndexOf(strB, editArea.getCaretPosition() - findText.getText().length() - 1);
if (k > -1) {
editArea.setCaretPosition(k);
editArea.select(k, k + strB.length());
} else {
JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
}
} else if (downButton.isSelected()) {
if (editArea.getSelectedText() == null)
k = strA.indexOf(strB, editArea.getCaretPosition() + 1);
else
k = strA.indexOf(strB, editArea.getCaretPosition() - findText.getText().length() + 1);
if (k > -1) {
editArea.setCaretPosition(k);
editArea.select(k, k + strB.length());
} else {
JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
}
}
}
});
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel directionPanel = new JPanel();
directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
directionPanel.add(upButton);
directionPanel.add(downButton);
panel1.setLayout(new GridLayout(2, 1));
panel1.add(findNextButton);
panel1.add(cancel);
panel2.add(findContentLabel);
panel2.add(findText);
panel2.add(panel1);
panel3.add(matchCheckBox);
panel3.add(directionPanel);
con.add(panel2);
con.add(panel3);
findDialog.setSize(410, 180);
findDialog.setResizable(false);
findDialog.setLocation(230, 280);
findDialog.setVisible(true);
}
public void replace() {
final JDialog replaceDialog = new JDialog(this, "替换", false);
Container con = replaceDialog.getContentPane();
con.setLayout(new FlowLayout(FlowLayout.CENTER));
JLabel findContentLabel = new JLabel("查找内容(N):");
final JTextField findText = new JTextField(15);
JButton findNextButton = new JButton("查找下一个(F):");
JLabel replaceLabel = new JLabel("替换为(P):");
final JTextField replaceText = new JTextField(15);
JButton replaceButton = new JButton("替换(R)");
JButton replaceAllButton = new JButton("全部替换(A)");
JButton cancel = new JButton("取消");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
replaceDialog.dispose();
}
});
final JCheckBox matchCheckBox = new JCheckBox("区分大小写(C)");
ButtonGroup bGroup = new ButtonGroup();
final JRadioButton upButton = new JRadioButton("向上(U)");
final JRadioButton downButton = new JRadioButton("向下(D)");
downButton.setSelected(true);
bGroup.add(upButton);
bGroup.add(downButton);
findNextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int k = 0, m = 0;
final String str1, str2, str3, str4, strA, strB;
str1 = editArea.getText();
str2 = findText.getText();
str3 = str1.toUpperCase();
str4 = str2.toUpperCase();
if (matchCheckBox.isSelected())
{
strA = str1;
strB = str2;
} else
{
strA = str3;
strB = str4;
}
if (upButton.isSelected()) {
if (editArea.getSelectedText() == null)
k = strA.lastIndexOf(strB, editArea.getCaretPosition() - 1);
else
k = strA.lastIndexOf(strB, editArea.getCaretPosition() - findText.getText().length() - 1);
if (k > -1) {
editArea.setCaretPosition(k);
editArea.select(k, k + strB.length());
} else {
JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
}
} else if (downButton.isSelected()) {
if (editArea.getSelectedText() == null)
k = strA.indexOf(strB, editArea.getCaretPosition() + 1);
else
k = strA.indexOf(strB, editArea.getCaretPosition() - findText.getText().length() + 1 );
if (k > -1) {
editArea.setCaretPosition(k);
editArea.select(k, k + strB.length());
} else {
JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
}
}
}
});
replaceButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (replaceText.getText().length() == 0 && editArea.getSelectedText() != null)
editArea.replaceSelection("");
if (replaceText.getText().length() > 0 && editArea.getSelectedText() != null)
editArea.replaceSelection(replaceText.getText());
}
});
replaceAllButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
editArea.setCaretPosition(0);
int k = 0, m = 0, replaceCount = 0;
if (findText.getText().length() == 0) {
JOptionPane.showMessageDialog(replaceDialog, "请填写查找内容!", "提示", JOptionPane.WARNING_MESSAGE);
findText.requestFocus(true);
return;
}
while (k > -1)
{
final String str1, str2, str3, str4, strA, strB;
str1 = editArea.getText();
str2 = findText.getText();
str3 = str1.toUpperCase();
str4 = str2.toUpperCase();
if (matchCheckBox.isSelected())
{
strA = str1;
strB = str2;
} else
{
strA = str3;
strB = str4;
}
if (upButton.isSelected()) {
if (editArea.getSelectedText() == null)
k = strA.lastIndexOf(strB, editArea.getCaretPosition() );
else
k = strA.lastIndexOf(strB, editArea.getCaretPosition() - findText.getText().length() );
if (k > -1) {
editArea.setCaretPosition(k);
editArea.select(k, k + strB.length());
} else {
if (replaceCount == 0) {
JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",
JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(replaceDialog, "成功替换" + replaceCount + "个匹配内容!", "替换成功",
JOptionPane.INFORMATION_MESSAGE);
}
}
} else if (downButton.isSelected()) {
if (editArea.getSelectedText() == null)
k = strA.indexOf(strB, editArea.getCaretPosition() );
else
k = strA.indexOf(strB, editArea.getCaretPosition() - findText.getText().length() );
if (k > -1) {
editArea.setCaretPosition(k);
editArea.select(k, k + strB.length());
} else {
if (replaceCount == 0) {
JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",
JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(replaceDialog, "成功替换" + replaceCount + "个匹配内容!", "替换成功",
JOptionPane.INFORMATION_MESSAGE);
}
}
}
if (replaceText.getText().length() == 0 && editArea.getSelectedText() != null) {
editArea.replaceSelection("");
replaceCount++;
}
if (replaceText.getText().length() > 0 && editArea.getSelectedText() != null) {
editArea.replaceSelection(replaceText.getText());
replaceCount++;
}
}
}
});
JPanel directionPanel = new JPanel();
directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
directionPanel.add(upButton);
directionPanel.add(downButton);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
panel4.setLayout(new GridLayout(2, 1));
panel1.add(findContentLabel);
panel1.add(findText);
panel1.add(findNextButton);
panel4.add(replaceButton);
panel4.add(replaceAllButton);
panel2.add(replaceLabel);
panel2.add(replaceText);
panel2.add(panel4);
panel3.add(matchCheckBox);
panel3.add(directionPanel);
panel3.add(cancel);
con.add(panel1);
con.add(panel2);
con.add(panel3);
replaceDialog.setSize(420, 220);
replaceDialog.setResizable(true);
replaceDialog.setLocation(230, 280);
replaceDialog.setVisible(true);
}
public void font() {
final JDialog fontDialog = new JDialog(this, "字体设置", false);
Container con = fontDialog.getContentPane();
con.setLayout(new FlowLayout(FlowLayout.LEFT));
JLabel fontLabel = new JLabel("字体(F):");
fontLabel.setPreferredSize(new Dimension(100, 20));
JLabel styleLabel = new JLabel("字形(Y):");
styleLabel.setPreferredSize(new Dimension(100, 20));
JLabel sizeLabel = new JLabel("大小(S):");
sizeLabel.setPreferredSize(new Dimension(100, 20));
final JLabel sample = new JLabel("记事本");
final JTextField fontText = new JTextField(9);
fontText.setPreferredSize(new Dimension(200, 20));
final JTextField styleText = new JTextField(8);
styleText.setPreferredSize(new Dimension(200, 20));
final int style[] = { Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC };
final JTextField sizeText = new JTextField(5);
sizeText.setPreferredSize(new Dimension(200, 20));
JButton okButton = new JButton("确定");
JButton cancel = new JButton("取消");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fontDialog.dispose();
}
});
Font currentFont = editArea.getFont();
fontText.setText(currentFont.getFontName());
fontText.selectAll();
if (currentFont.getStyle() == Font.PLAIN)
styleText.setText("常规");
else if (currentFont.getStyle() == Font.BOLD)
styleText.setText("粗体");
else if (currentFont.getStyle() == Font.ITALIC)
styleText.setText("斜体");
else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC))
styleText.setText("粗斜体");
styleText.selectAll();
String str = String.valueOf(currentFont.getSize());
sizeText.setText(str);
sizeText.selectAll();
final JList fontList, styleList, sizeList;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
final String fontName[] = ge.getAvailableFontFamilyNames();
fontList = new JList(fontName);
fontList.setFixedCellWidth(86);
fontList.setFixedCellHeight(20);
fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
final String fontStyle[] = { "常规", "粗体", "斜体", "粗斜体" };
styleList = new JList(fontStyle);
styleList.setFixedCellWidth(86);
styleList.setFixedCellHeight(20);
styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
if (currentFont.getStyle() == Font.PLAIN)
styleList.setSelectedIndex(0);
else if (currentFont.getStyle() == Font.BOLD)
styleList.setSelectedIndex(1);
else if (currentFont.getStyle() == Font.ITALIC)
styleList.setSelectedIndex(2);
else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC))
styleList.setSelectedIndex(3);
final String fontSize[] = { "8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36",
"48", "72" };
sizeList = new JList(fontSize);
sizeList.setFixedCellWidth(43);
sizeList.setFixedCellHeight(20);
sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
fontText.setText(fontName[fontList.getSelectedIndex()]);
fontText.selectAll();
Font sampleFont1 = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
Integer.parseInt(sizeText.getText()));
sample.setFont(sampleFont1);
}
});
styleList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
int s = style[styleList.getSelectedIndex()];
styleText.setText(fontStyle[s]);
styleText.selectAll();
Font sampleFont2 = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
Integer.parseInt(sizeText.getText()));
sample.setFont(sampleFont2);
}
});
sizeList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
sizeText.setText(fontSize[sizeList.getSelectedIndex()]);
sizeText.selectAll();
Font sampleFont3 = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
Integer.parseInt(sizeText.getText()));
sample.setFont(sampleFont3);
}
});
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Font okFont = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
Integer.parseInt(sizeText.getText()));
editArea.setFont(okFont);
fontDialog.dispose();
}
});
JPanel samplePanel = new JPanel();
samplePanel.setBorder(BorderFactory.createTitledBorder("示例"));
samplePanel.add(sample);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
panel2.add(fontText);
panel2.add(styleText);
panel2.add(sizeText);
panel2.add(okButton);
panel3.add(new JScrollPane(fontList));
panel3.add(new JScrollPane(styleList));
panel3.add(new JScrollPane(sizeList));
panel3.add(cancel);
con.add(panel1);
con.add(panel2);
con.add(panel3);
con.add(samplePanel);
fontDialog.setSize(350, 340);
fontDialog.setLocation(200, 200);
fontDialog.setResizable(false);
fontDialog.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == fileMenu_New) {
editArea.requestFocus();
String currentValue = editArea.getText();
boolean isTextChange = (currentValue.equals(oldValue)) ? false : true;
if (isTextChange) {
int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "提示",
JOptionPane.YES_NO_CANCEL_OPTION);
if (saveChoose == JOptionPane.YES_OPTION) {
String str = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("另存为");
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
return;
}
File saveFileName = fileChooser.getSelectedFile();
if (saveFileName == null || saveFileName.getName().equals("")) {
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
} else {
try {
FileWriter fw = new FileWriter(saveFileName);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(editArea.getText(), 0, editArea.getText().length());
bfw.flush();
bfw.close();
isNewFile = false;
currentFile = saveFileName;
oldValue = editArea.getText();
this.setTitle(saveFileName.getName() + " - 记事本");
statusLabel.setText("当前打开文件:" + saveFileName.getAbsoluteFile());
} catch (IOException ioException) {
}
}
} else if (saveChoose == JOptionPane.NO_OPTION) {
editArea.replaceRange("", 0, editArea.getText().length());
statusLabel.setText(" 新建文件");
this.setTitle("无标题 - 记事本");
isNewFile = true;
undo.discardAllEdits();
editMenu_Undo.setEnabled(false);
oldValue = editArea.getText();
} else if (saveChoose == JOptionPane.CANCEL_OPTION) {
return;
}
} else {
editArea.replaceRange("", 0, editArea.getText().length());
statusLabel.setText(" 新建文件");
this.setTitle("无标题 - 记事本");
isNewFile = true;
undo.discardAllEdits();
editMenu_Undo.setEnabled(false);
oldValue = editArea.getText();
}
}
else if (e.getSource() == fileMenu_Open) {
editArea.requestFocus();
String currentValue = editArea.getText();
boolean isTextChange = (currentValue.equals(oldValue)) ? false : true;
if (isTextChange) {
int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "提示",
JOptionPane.YES_NO_CANCEL_OPTION);
if (saveChoose == JOptionPane.YES_OPTION) {
String str = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("另存为");
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
statusLabel.setText("您没有选择任何文件");
return;
}
File saveFileName = fileChooser.getSelectedFile();
if (saveFileName == null || saveFileName.getName().equals("")) {
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
} else {
try {
FileWriter fw = new FileWriter(saveFileName);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(editArea.getText(), 0, editArea.getText().length());
bfw.flush();
bfw.close();
isNewFile = false;
currentFile = saveFileName;
oldValue = editArea.getText();
this.setTitle(saveFileName.getName() + " - 记事本");
statusLabel.setText("当前打开文件:" + saveFileName.getAbsoluteFile());
} catch (IOException ioException) {
}
}
} else if (saveChoose == JOptionPane.NO_OPTION) {
String str = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("打开文件");
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
statusLabel.setText("您没有选择任何文件");
return;
}
File fileName = fileChooser.getSelectedFile();
if (fileName == null || fileName.getName().equals("")) {
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
} else {
try {
FileReader fr = new FileReader(fileName);
BufferedReader bfr = new BufferedReader(fr);
editArea.setText("");
while ((str = bfr.readLine()) != null) {
editArea.append(str);
}
this.setTitle(fileName.getName() + " - 记事本");
statusLabel.setText(" 当前打开文件:" + fileName.getAbsoluteFile());
fr.close();
isNewFile = false;
currentFile = fileName;
oldValue = editArea.getText();
} catch (IOException ioException) {
}
}
} else {
return;
}
} else {
String str = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("打开文件");
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
statusLabel.setText(" 您没有选择任何文件 ");
return;
}
File fileName = fileChooser.getSelectedFile();
if (fileName == null || fileName.getName().equals("")) {
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
} else {
try {
FileReader fr = new FileReader(fileName);
BufferedReader bfr = new BufferedReader(fr);
editArea.setText("");
while ((str = bfr.readLine()) != null) {
editArea.append(str);
}
this.setTitle(fileName.getName() + " - 记事本");
statusLabel.setText(" 当前打开文件:" + fileName.getAbsoluteFile());
fr.close();
isNewFile = false;
currentFile = fileName;
oldValue = editArea.getText();
} catch (IOException ioException) {
}
}
}
}
else if (e.getSource() == fileMenu_Save) {
editArea.requestFocus();
if (isNewFile) {
String str = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("保存");
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
statusLabel.setText("您没有选择任何文件");
return;
}
File saveFileName = fileChooser.getSelectedFile();
if (saveFileName == null || saveFileName.getName().equals("")) {
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
} else {
try {
FileWriter fw = new FileWriter(saveFileName);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(editArea.getText(), 0, editArea.getText().length());
bfw.flush();
bfw.close();
isNewFile = false;
currentFile = saveFileName;
oldValue = editArea.getText();
this.setTitle(saveFileName.getName() + " - 记事本");
statusLabel.setText("当前打开文件:" + saveFileName.getAbsoluteFile());
} catch (IOException ioException) {
}
}
} else {
try {
FileWriter fw = new FileWriter(currentFile);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(editArea.getText(), 0, editArea.getText().length());
bfw.flush();
fw.close();
} catch (IOException ioException) {
}
}
}
else if (e.getSource() == fileMenu_SaveAs) {
editArea.requestFocus();
String str = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setDialogTitle("另存为");
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
statusLabel.setText("您没有选择任何文件");
return;
}
File saveFileName = fileChooser.getSelectedFile();
if (saveFileName == null || saveFileName.getName().equals("")) {
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
} else {
try {
FileWriter fw = new FileWriter(saveFileName);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(editArea.getText(), 0, editArea.getText().length());
bfw.flush();
fw.close();
oldValue = editArea.getText();
this.setTitle(saveFileName.getName() + " - 记事本");
statusLabel.setText(" 当前打开文件:" + saveFileName.getAbsoluteFile());
} catch (IOException ioException) {
}
}
}
else if (e.getSource() == fileMenu_Exit) {
int exitChoose = JOptionPane.showConfirmDialog(this, "确定要退出吗?", "退出提示", JOptionPane.OK_CANCEL_OPTION);
if (exitChoose == JOptionPane.OK_OPTION) {
System.exit(0);
} else {
return;
}
}
else if (e.getSource() == editMenu_Undo || e.getSource() == popupMenu_Undo) {
if (undo.canUndo()) {
try {
undo.undo();
} catch (CannotUndoException ex) {
System.out.println("Unable to undo:" + ex);
}
}
if (!undo.canUndo()) {
editMenu_Undo.setEnabled(false);
}
}
else if (e.getSource() == editMenu_Cut || e.getSource() == popupMenu_Cut) {
editArea.requestFocus();
String text = editArea.getSelectedText();
StringSelection selection = new StringSelection(text);
clipBoard.setContents(selection, null);
editArea.replaceRange("", editArea.getSelectionStart(), editArea.getSelectionEnd());
checkMenuItemEnabled();
}
else if (e.getSource() == editMenu_Copy || e.getSource() == popupMenu_Copy) {
editArea.requestFocus();
String text = editArea.getSelectedText();
StringSelection selection = new StringSelection(text);
clipBoard.setContents(selection, null);
checkMenuItemEnabled();
}
else if (e.getSource() == editMenu_Paste || e.getSource() == popupMenu_Paste) {
editArea.requestFocus();
Transferable contents = clipBoard.getContents(this);
if (contents == null)
return;
String text = "";
try {
text = (String) contents.getTransferData(DataFlavor.stringFlavor);
} catch (Exception exception) {
}
editArea.replaceRange(text, editArea.getSelectionStart(), editArea.getSelectionEnd());
checkMenuItemEnabled();
}
else if (e.getSource() == editMenu_Delete || e.getSource() == popupMenu_Delete) {
editArea.requestFocus();
editArea.replaceRange("", editArea.getSelectionStart(), editArea.getSelectionEnd());
checkMenuItemEnabled();
}
else if (e.getSource() == editMenu_Find) {
editArea.requestFocus();
find();
}
else if (e.getSource() == editMenu_FindNext) {
editArea.requestFocus();
find();
}
else if (e.getSource() == editMenu_Replace) {
editArea.requestFocus();
replace();
}
else if (e.getSource() == editMenu_SelectAll || e.getSource() == popupMenu_SelectAll) {
editArea.selectAll();
}
else if (e.getSource() == formatMenu_LineWrap) {
if (formatMenu_LineWrap.getState())
editArea.setLineWrap(true);
else
editArea.setLineWrap(false);
}
else if (e.getSource() == formatMenu_Font) {
editArea.requestFocus();
font();
}
else if (e.getSource() == viewMenu_Status) {
if (viewMenu_Status.getState())
statusLabel.setVisible(true);
else
statusLabel.setVisible(false);
}
else if (e.getSource() == helpMenu_HelpTopics) {
editArea.requestFocus();
JOptionPane.showMessageDialog(this, "Java记事本", "帮助主题", JOptionPane.INFORMATION_MESSAGE);
}
}
public void removeUpdate(DocumentEvent e) {
editMenu_Undo.setEnabled(true);
}
public void insertUpdate(DocumentEvent e) {
editMenu_Undo.setEnabled(true);
}
public void changedUpdate(DocumentEvent e) {
editMenu_Undo.setEnabled(true);
}
public static void main(String args[]) {
Notepad notepad = new Notepad();
notepad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}