第十三周课程总结&实验报告 记事本 课程总结
实验代码
package 记事本;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
public class TextPad implements ActionListener {
JFrame frame;
JMenuBar bar;
JMenu fileMenu,editMenu;
JMenuItem newItem,openItem,saveItem,closeItem,memoryItem;
ImageIcon newIcon,openIcon,saveIcon,closeIcon,memoryIcon;
JScrollPane scroll;
JTextArea area;
JFileChooser chooser;
File file;
JLabel label=new JLabel();
public TextPad() {
frame = new JFrame("记事本");
bar=new JMenuBar();
fileMenu=new JMenu("文件");
editMenu= new JMenu("编辑");
newIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"新建.png");
openIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"打开.png");
saveIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"另存为.png");
closeIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"关闭.png");
memoryIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"存储.png");
newItem=new JMenuItem("新建(N)",newIcon);
openItem=new JMenuItem("打开(O)",openIcon);
saveItem=new JMenuItem("另存为(A)",saveIcon);
closeItem=new JMenuItem("关闭(X)",closeIcon);
memoryItem=new JMenuItem("存储(S)",memoryIcon);
area=new JTextArea();
scroll=new JScrollPane(area);
newItem.setMnemonic(KeyEvent.VK_N);
openItem.setMnemonic(KeyEvent.VK_O);
saveItem.setMnemonic(KeyEvent.VK_A);
closeItem.setMnemonic(KeyEvent.VK_X);
memoryItem.setMnemonic(KeyEvent.VK_S);
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_DOWN_MASK));
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_DOWN_MASK));
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_DOWN_MASK));
closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_DOWN_MASK));
memoryItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_DOWN_MASK));
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(memoryItem);
fileMenu.add(saveItem);
fileMenu.addSeparator();
fileMenu.add(closeItem);
newItem.addActionListener(this);
openItem.addActionListener(this);
saveItem.addActionListener(this);
closeItem.addActionListener(this);
memoryItem.addActionListener(this);
bar.add(fileMenu);
bar.add(editMenu);
frame.setJMenuBar(bar);
frame.add(scroll);
frame.setSize(1080,720);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
Object obj=event.getSource();
if(obj instanceof JMenuItem) {
JMenuItem item=(JMenuItem) obj;
if(item==newItem) {
new TextPad();
}else if(item==openItem) {
chooser=new JFileChooser();
chooser.showOpenDialog(null);
file=chooser.getSelectedFile();
try {
FileInputStream fis =new FileInputStream(file);
byte[]b = new byte[fis.available()];
fis.read(b);
area.append(new String(b));
fis.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}else if(item==saveItem) {
chooser.showSaveDialog(null);
file = chooser.getSelectedFile();
try {
if(!file.exists()) {
file.createNewFile();
}
FileOutputStream fos=new FileOutputStream(file);
byte b[]=area.getText().getBytes();
fos.write(b);
fos.close();
}catch(IOException e) {
e.printStackTrace();
}
}else if(item==closeItem) {
System.exit(1);
}else if(item==memoryItem) {
if(file!=null) {
try {
PrintStream out=new PrintStream(new FileOutputStream(file));
out.print(this.area.getText());
out.close();
}catch(Exception e) {
this.label.setText("文件保存异常");
}
}
}
}
}
}
package 记事本;
public class Test {
public static void main(String[] args) {
new TextPad();
}
}
运行截图
设计思路
基本上和老师上课讲的是一样的,
要添加的是“保存”
这个在菜单项、快捷方式、图标,和其他四项是差不多的,
不同的一点是监听器,最后一个else if对保存进行操作。
课程总结
鼠标拖拽事件及监听处理
在一般图形界面中经常可以看到鼠标拖拽操作的情况,在Swing的事件处理中可以使用MouseMotionListener接口完成鼠标的拖拽操作。
此接口定义了如下所示的方法。
单选钮JRadioButton和复选框JCheckBox
单选钮是一种常见的输入组件,它可以实现n选一的功能,最基础的就是性别的选择。在单选钮的操作中,可以使用ItemListener接口进行事件的监听。
把单选钮和复选框放到一起来讲,就是因为。复选框和单旋钮的区别是可以实现n选多的操作样式。
菜单组件
当一个界面中出现许多按钮时,可以利用菜单进行统一的管理与布局,这样可以让界面的功能更加丰富,布局也更加简洁。
JMenu与JMenubar
JMenubar组件的功能是用来摆放JMenu组件,当建立起多个JMenu组件之后,需要通过JMenubar组件来将JMenu组件放入窗口中。
菜单栏和菜单的关系
JMenuItem菜单项
JMenuItem就是加到JMenu里,JMenuItem可以理解为一种特殊的JButton组件,当选择某个菜单项时,也会触发ActionEvent事件。
加快捷键老师讲了一个方法。
xxItem.setMnemonic(KeyEvent.VK_X);
总结
记事本老师上课已经做过一遍了,实现了文件的功能。课后的编程则需要在此之上实现保存的功能,并不是特别难。这次编程的代码行数有点多,还是要多多练习才行。