?? notebook6.java
字號:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class NoteBook6 extends JFrame {
private JMenuItem menuOpen;
private JMenuItem menuSave;
private JMenuItem menuSaveAs;
private JMenuItem menuClose;
private JMenu editMenu;
private JMenuItem menuCut;
private JMenuItem menuCopy;
private JMenuItem menuPaste;
private JMenuItem menuAbout;
private JTextArea textArea;
private JLabel stateBar;
private JFileChooser fileChooser;
private JPopupMenu popUpMenu;
public NoteBook6() {
super("新建文本文件");
setUpUIComponent();
setUpEventListener();
setVisible(true);
}
private void setUpUIComponent() {
setSize(640, 480);
// 菜單欄
JMenuBar menuBar = new JMenuBar();
// 設置「文件」菜單
JMenu fileMenu = new JMenu("文件");
menuOpen = new JMenuItem("打開");
// 快捷鍵設置
menuOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
menuSave = new JMenuItem("保存");
menuSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
menuSaveAs = new JMenuItem("另存為");
menuClose = new JMenuItem("關閉");
menuClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
InputEvent.CTRL_MASK));
fileMenu.add(menuOpen);
fileMenu.addSeparator(); // 分隔線
fileMenu.add(menuSave);
fileMenu.add(menuSaveAs);
fileMenu.addSeparator(); // 分隔線
fileMenu.add(menuClose);
// 設置「編輯」菜單
JMenu editMenu = new JMenu("編輯");
menuCut = new JMenuItem("剪切");
menuCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
InputEvent.CTRL_MASK));
menuCopy = new JMenuItem("復制");
menuCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK));
menuPaste = new JMenuItem("粘貼");
menuPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
InputEvent.CTRL_MASK));
editMenu.add(menuCut);
editMenu.add(menuCopy);
editMenu.add(menuPaste);
// 設置「關于」菜單
JMenu aboutMenu = new JMenu("關于");
menuAbout = new JMenuItem("關于記事本");
aboutMenu.add(menuAbout);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(aboutMenu);
setJMenuBar(menuBar);
// 文字編輯區域
textArea = new JTextArea();
textArea.setFont(new Font("宋體", Font.PLAIN, 16));
textArea.setLineWrap(true);
JScrollPane panel = new JScrollPane(textArea,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
Container contentPane = getContentPane();
contentPane.add(panel, BorderLayout.CENTER);
// 狀態欄
stateBar = new JLabel("未修改");
stateBar.setHorizontalAlignment(SwingConstants.LEFT);
stateBar.setBorder(BorderFactory.createEtchedBorder());
contentPane.add(stateBar, BorderLayout.SOUTH);
popUpMenu = editMenu.getPopupMenu();
fileChooser = new JFileChooser();
}
private void setUpEventListener() {
// 按下窗口關閉鈕事件處理
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
closeFile();
}
});
// 菜單 - 打開
menuOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile();
}
});
// 菜單 - 保存
menuSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveFile();
}
});
// 菜單 - 另存為
menuSaveAs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveFileAs();
}
});
// 菜單 - 關閉文件
menuClose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
closeFile();
}
});
// 菜單 - 剪切
menuCut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cut();
}
});
// 菜單 - 復制
menuCopy.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
copy();
}
});
// 菜單 - 粘貼
menuPaste.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
paste();
}
});
// 菜單 - 關于
menuAbout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 顯示對話框
JOptionPane.showOptionDialog(null, "程序名稱:\n NoteBook \n"
+ "簡介:\n 一個簡單的文字編輯器\n", "關于NoteBook",
JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, null, null);
}
});
// 編輯區鍵盤事件
textArea.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
processTextArea();
}
});
// 編輯區鼠標事件
textArea.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3)
popUpMenu.show(editMenu, e.getX(), e.getY());
}
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1)
popUpMenu.setVisible(false);
}
});
}
private void openFile() {
if (isCurrentFileSaved()) { // 文件是否為保存狀態
open(); // 打開
} else {
// 顯示對話框
int option = JOptionPane.showConfirmDialog(null, "文件已修改,是否保存?",
"保存文件?", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE, null);
switch (option) {
// 確認文件保存
case JOptionPane.YES_OPTION:
saveFile(); // 保存文件
break;
// 放棄文件保存
case JOptionPane.NO_OPTION:
open();
break;
}
}
}
private boolean isCurrentFileSaved() {
if (stateBar.getText().equals("未修改")) {
return true;
} else {
return false;
}
}
private void open() {
// fileChooser 是 JFileChooser 的實例
// 顯示文件選取的對話框
int option = fileChooser.showDialog(null, null);
// 使用者按下確認鍵
if (option == JFileChooser.APPROVE_OPTION) {
/*
TODO: 添加讀取文件的代碼
*/
}
}
private void saveFile() {
/*
TODO: 添加保存文件的代碼
*/
}
private void saveFileAs() {
/*
TODO: 添加另存為的代碼
*/
}
private void closeFile() {
// 是否已保存文件
if (isCurrentFileSaved()) {
// 釋放窗口資源,而后關閉程序
dispose();
} else {
int option = JOptionPane.showConfirmDialog(null, "文件已修改,是否保存?",
"保存文件?", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE, null);
switch (option) {
case JOptionPane.YES_OPTION:
saveFile();
break;
case JOptionPane.NO_OPTION:
dispose();
}
}
}
private void cut() {
textArea.cut();
stateBar.setText("已修改");
popUpMenu.setVisible(false);
}
private void copy() {
textArea.copy();
popUpMenu.setVisible(false);
}
private void paste() {
textArea.paste();
stateBar.setText("已修改");
popUpMenu.setVisible(false);
}
private void processTextArea() {
stateBar.setText("已修改");
}
public static void main(String[] args) {
new NoteBook6();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -