使用JAVA SWING製作簡單記事本

Java很多地方都很不錯,不過他的swing一直是我覺得最難看之處。之前面試一家公司的時候被要求寫一個Java界面,由於太久沒寫過,感覺很生疏,所以現在想重溫一下。只是工作這麼久,還沒見過用Java寫界面的。不知是不是沒什麼人用呢?

廢話少說,一步到位,呵呵。現在研究不深,只講功能,不講效率,各位將就着看吧。

package usage;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
*
* @Date: 2013-11-14 上午10:41:14
* @Author: gyh
* @TODO:
*/
public class NodePad extends JFrame implements ActionListener {
private Container contentPane;
private Font commonFont = new Font("宋體", Font.PLAIN, 18);
private Font statusFont = new Font("宋體", Font.PLAIN, 12);
private Color color = Color.GRAY;
private JTextArea showArea;// 主要文本顯示區
private JToolBar status;// 狀態欄
private JTextField statusField;// 狀態欄中用於顯示文字的地方
public NodePad() {
contentPane = getContentPane();// 獲取容器(即容器)本身
this.setTitle("First Frame");// 設置標題
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();// 獲取屏幕分辨率
this.setLocation((size.width - size.width / 2) / 2,(size.height - size.height / 2) / 2);// 設置居中
this.setSize(size.width / 2, size.height / 2);// 設置大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 設置退出時動作。如果不設置這東東,即使你關了界面,它還會活在進程中
contentPane.setLayout(new BorderLayout());// 設置容器佈局
this.setResizable(true);// 設置可惜重置大小
init();
this.setVisible(true);// 設置可見
}
// 初始化系統組件
private void init() {
contentPane.add(getMenuBars(), BorderLayout.NORTH);// 添加菜單欄
showArea = new JTextArea();// 添加文本域
showArea.setFont(commonFont);// 設置文本域字體
showArea.setLineWrap(true);// 設置自動換行
JScrollPane scroll = new JScrollPane(showArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);// 給文本域添加滾動條
contentPane.add(scroll, BorderLayout.CENTER);
status = new JToolBar();
statusField = new JTextField("就緒..");
statusField.setFont(statusFont);
statusField.setForeground(color);
statusField.setEditable(false);// 設置狀態欄文字不可編輯
status.add(statusField);
status.setEnabled(false);// 設置狀態欄不可移動
contentPane.add(status, BorderLayout.SOUTH);
}
/**
* '文件'菜單
*
* @return
*/
private JMenuBar getMenuBars() {
JMenuBar menuBar = new JMenuBar();// 菜單欄
JMenu fileMenu = new JMenu("文件");
fileMenu.setMnemonic(KeyEvent.VK_F);// 快捷鍵,用alt+o就可以按出來
JMenuItem open = new JMenuItem("打開");
open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.ALT_MASK));// 快捷鍵,用alt+f就可以按出來
JMenuItem save = new JMenuItem("保存");
save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.ALT_MASK));// 快捷鍵,用alt+f就可以按出來
fileMenu.addSeparator();// 一條橫線,美觀用
JMenuItem exit = new JMenuItem("關閉");
exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,ActionEvent.ALT_MASK));// 快捷鍵,用alt+q就可以按出來
// 添加事件監聽器,注意要繼承ActionListener接口,並實現actoinPerformed方法
open.addActionListener(this);
open.setActionCommand("open");
save.addActionListener(this);
save.setActionCommand("save");
exit.addActionListener(this);
exit.setActionCommand("exit");
menuBar.add(fileMenu);// 將文件菜單加入菜單欄
// 將按鈕加入文件菜單中
fileMenu.add(open);
fileMenu.add(save);
fileMenu.add(exit);
return menuBar;
}
public static void main(String[] a) {
new NodePad();
}
@Override
public void actionPerformed(ActionEvent e) {
// 退出
if (e.getActionCommand().equals("exit")) {
System.exit(0);
}
// 如果“打開”按鈕被按到
if (e.getActionCommand().equals("open")) {
JFileChooser openFile = new JFileChooser("打開文件");// 添加文件打開窗口
openFile.setAcceptAllFileFilterUsed(false);// 去掉'顯示全部'這個選項
openFile.addChoosableFileFilter(new FileNameExtensionFilter("ini文件", "ini"));// 文件過濾
openFile.addChoosableFileFilter(new FileNameExtensionFilter("txt文件", "txt"));
int val = openFile.showOpenDialog(this);
BufferedReader br = null;
if (val == JFileChooser.APPROVE_OPTION) {
File file = openFile.getSelectedFile();
try {
br = new BufferedReader(new FileReader(file));
showArea.setText("");
String line = "";
// 讀取文件
while ((line = br.readLine()) != null) {
showArea.append(line + "\n");
}
statusField.setText("成功打開");
} catch (FileNotFoundException fnfe) {
statusField.setText("找不到文件");
} catch (IOException ioe) {
statusField.setText("讀取文件錯誤");
} finally {
try {
if (br != null)br.close();// 不要忘記關閉流
} catch (IOException e1) {
}
}
}
}
//如果“保存”按鈕被按到
if (e.getActionCommand().equals("save")) {
JFileChooser saveFile = new JFileChooser("保存");
saveFile.setAcceptAllFileFilterUsed(false);
saveFile.addChoosableFileFilter(new FileNameExtensionFilter("ini文件", "ini"));// 文件過濾
saveFile.addChoosableFileFilter(new FileNameExtensionFilter("txt文件", "txt"));
int val = saveFile.showSaveDialog(this);
if (val == JFileChooser.APPROVE_OPTION) {
File selectedFile = saveFile.getSelectedFile();// 獲取選中文件
String fileName = selectedFile.getName();
if (fileName.lastIndexOf(".") == -1) {// 如果用戶沒有添加後綴(即沒有'.'號),則要爲它加上
String selectedExtension = saveFile.getFileFilter().getDescription();// 獲取選中後綴描述(即“ini文件”等)
String end = selectedExtension.substring(0,selectedExtension.lastIndexOf("文件"));
fileName = fileName + "." + end;
}
String filePath = selectedFile.getParent() + "\\";// 取出路徑
File newFile = new File(filePath + fileName);
BufferedWriter bw = null;
try {
if (newFile.exists()) {//如果文件已存在,提醒用戶
int result = JOptionPane.showConfirmDialog(null,"文件已存在,確定要覆蓋嗎?");
if (result == JOptionPane.DEFAULT_OPTION)
newFile.createNewFile();
else
return;
} else {
newFile.createNewFile();
}
// 開始寫文件
bw = new BufferedWriter(new FileWriter(newFile));
bw.write(showArea.getText());
bw.flush();
statusField.setText("存儲成功");
} catch (IOException e1) {
statusField.setText("存儲出錯");
} finally {
try {
if (bw != null)bw.close();// 不要忘記關閉流
} catch (IOException e1) {
}
}
}
}
}
}

另外,有誰知道怎麼設置代碼格式嗎,這樣好難看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章