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) {
}
}
}
}
}
}
另外,有谁知道怎么设置代码格式吗,这样好难看。
转载于:https://blog.51cto.com/88qlp88/1324901