利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上;允许对文字内容进行编辑,并可以保存到文件。
实现代码
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class NoteBook_final {
private static void createAndShowGUI() {
JFrame f = new JFrame("XX的窗口");
f.setSize(700,600);
f.setLocation(300,200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//----
JMenuBar menuBar = new JMenuBar();
//----
JMenu menu1 = new JMenu("文件(F)");
JMenu menu2 = new JMenu("编辑(E)");
JMenu menu3 = new JMenu("格式(O)");
JMenu menu4 = new JMenu("查看(V)");
JMenu menu5 = new JMenu("帮助(H)");
menuBar.add(menu1);
menuBar.add(menu2);
menuBar.add(menu3);
menuBar.add(menu4);
menuBar.add(menu5);
//-----------------------------------------------------------------
JMenuItem item1 = new JMenuItem("新建(Ctrl+N)");
JMenuItem item2 = new JMenuItem("保存(Ctrl+D)");
JMenuItem item3 = new JMenuItem("另存为(Ctrl+S)");
JMenuItem item4 = new JMenuItem("打开(Ctrl+O)");
JMenuItem item5 = new JMenuItem("退出(Ctrl+X)");
menu1.add(item1);
menu1.addSeparator();
menu1.add(item2);
menu1.addSeparator();
menu1.add(item3);
menu1.addSeparator();
menu1.add(item4);
menu1.addSeparator();
menu1.add(item5);
//-----------------------------------------------------------------
JTextArea tf = new JTextArea(30,20);
tf.setFont(new Font("宋体", Font.PLAIN, 20));
f.add(tf);
//------------
//--------------------
SortCut(f,tf);
scrollpane(f,tf);
item1.addActionListener(e->{
CreateNew();
});
item4.addActionListener(e->{
ReadData(f,tf);
});
item5.addActionListener(e->{
Exit();
});
item3.addActionListener(e->{
WriteOther(f,tf);
});
item2.addActionListener(e->{
WriteData(f,tf);
});
f.setJMenuBar(menuBar);
}
//---------------------------------------------------------------------------------------------------------------------
public static void SortCut(JFrame f,JTextArea tf) {
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
/*
int KeyCode = e.getKeyCode();
String s=KeyEvent.getKeyText(KeyCode);
System.out.println(s);
*/
/*
if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
if(e.getKeyCode() == KeyEvent.VK_N) {
CreateNew(item1);
}
}
*/
if((e.isControlDown()==true)&&(e.getKeyCode() == KeyEvent.VK_N)) {
CreateNew();
System.out.println("新建");
}
if((e.isControlDown()==true)&&(e.getKeyCode() == KeyEvent.VK_X)) {
Exit();
System.out.println("退出");
}
if((e.isControlDown()==true)&&(e.getKeyCode() == KeyEvent.VK_D)) {
WriteData(f,tf);
System.out.println("保存");
}
if((e.isControlDown()==true)&&(e.getKeyCode() == KeyEvent.VK_S)) {
WriteOther(f,tf);
System.out.println("另存为");
}
if((e.isControlDown()==true)&&(e.getKeyCode() == KeyEvent.VK_O)) {
ReadData(f,tf);
System.out.println("打开");
}
}
});
}
public static void HaveSaved() {
JFrame f = new JFrame("XX的窗体!");
f.setLayout(new FlowLayout(FlowLayout.LEFT,100,30));
//f.setLayout(new BorderLayout());
f.setSize(300,200);
f.setLocation(500, 400);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//-------
Button btn=new Button("确认且退出");
btn.setBounds(115,100,50,25);
//----
//JLabel label = new JLabel("已保存",JLabel.CENTER);
JLabel label = new JLabel("已保存");
label.setFont(new Font("宋体", Font.PLAIN, 24));
f.add(label);
f.add(btn);
//------------------
btn.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
}
public static void ReadData(JFrame f,JTextArea tf) {
try {
FileDialog fileDialog = new FileDialog(f);
fileDialog.setVisible(true);
String directory = fileDialog.getDirectory();//获取目录路径
String file = fileDialog.getFile();//获取文件路径
String path = directory + file;
FileReader in = new FileReader(path);
//----------------------------------
int len = 0;
while((len=in.read())!=-1)
{
String s = String.valueOf((char)len);
tf.append(s);
}
in.close();
}catch(Exception x) {
x.printStackTrace();
}
}
public static void WriteData(JFrame f,JTextArea tf){
try {
FileWriter out = new FileWriter("C:\\Users\\XX\\Desktop\\Java代码\\实验2试试\\1022.txt");
String str = tf.getText();
out.write(str);
out.close();
HaveSaved();
}catch(Exception x) {}
}
public static void WriteOther(JFrame f,JTextArea tf){
try {
FileDialog fileDialog = new FileDialog(f);
fileDialog.setVisible(true);
String directory = fileDialog.getDirectory();//获取目录路径
String file = fileDialog.getFile();//获取文件路径
String path = directory + file;
FileWriter out = new FileWriter(path);
//------------------------------------
String str = tf.getText();
out.write(str);
out.close();
//HaveSaved();
}catch(Exception x) {}
}
//--------------
public static void scrollpane(JFrame f,JTextArea tf) {
JScrollPane scrollPane = new JScrollPane(tf);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
f.add(scrollPane);
}
//-------------
public static void CreateNew() {
createAndShowGUI();
}
public static void Exit() {
System.exit(0);
}
//------------------------------------------
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(NoteBook_final::createAndShowGUI);
}
}
以下为代码实现结果: