记事本:
package A;
import java.awt.*;
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.IOException;
import javax.swing.*;
public class Notepad implements ActionListener {
JFrame frame;
JMenuBar bar;
JMenu fileMenu,editMenu;
ImageIcon newIcon,openIcon,saveIcon,closeIcon;
JMenuItem newItem,openItem,saveItem,closeItem;
JTextArea jta;
JScrollPane scroll;
File file;
public Notepad() {
frame=new JFrame("谢思敏");
bar=new JMenuBar();
fileMenu=new JMenu("文件");
editMenu=new JMenu("编辑");
jta=new JTextArea();
scroll=new JScrollPane(jta,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
newIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"1.png");
openIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"2.png");
saveIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"3.png");
closeIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"4.png");
newItem=new JMenuItem("新建(N)",newIcon);
openItem=new JMenuItem("打开(O)",openIcon);
saveItem=new JMenuItem("保存(S)",saveIcon);
closeItem=new JMenuItem("关闭(C)",closeIcon);
newItem.setMnemonic(KeyEvent.VK_N);
openItem.setMnemonic(KeyEvent.VK_O);
saveItem.setMnemonic(KeyEvent.VK_S);
closeItem.setMnemonic(KeyEvent.VK_C);
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
newItem.addActionListener(this);
openItem.addActionListener(this);
saveItem.addActionListener(this);
closeItem.addActionListener(this);
bar.add(fileMenu);
bar.add(editMenu);
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
frame.add(scroll);
frame.setJMenuBar(bar);
frame.setVisible(true);
frame.setSize(400, 300);
}
@Override
public void actionPerformed(ActionEvent event) {
Object obj=event.getSource();
if(obj instanceof JMenuItem) {
JMenuItem item=(JMenuItem)obj;
if(item==newItem) {
new Notepad();
}else if(item==openItem) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
file=chooser.getSelectedFile();
try {
FileInputStream fis = new FileInputStream(file);
byte[] b=new byte[fis.available()];
fis.read(b);
jta.append(new String(b));
fis.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else if(item==saveItem) {
JFileChooser chooser = new JFileChooser();
chooser.showSaveDialog(null);
file=chooser.getSelectedFile();
if(!file.exists()) {
try {
file.createNewFile();
}catch (IOException e) {
e.printStackTrace();
}
}
}else if(item==closeItem) {
System.exit(0);
}
}
}
}
截图:
学习总结:
对于编写记事本来说使用最多的是菜单组件和动作监听器的应用。至于这周所学
1.菜单组件:
public void setMnemonic(int mnemonic)
这个方法可以设置键盘助记字符,不过该方法的使用是依赖Swing组件的菜单分层结构的,也就是说设置了该助记字符的菜单项目必须已经展开了,才能使用(通过和Alt+键结合使用).
值得注意的是 setMnemonic 并非是JMenuItem的方法,而是来着他的父类AbstractButton的,所以该方法通常是不应用于菜单项的。
JMenuItem自身有一个方法 public void setAccelerator(KeyStroke keyStroke) 该方法的功能要比上面的那个方法要强大,该方法可以设置菜单项的快捷键,它是不依赖菜单的分层结构的。
列如:
JFrame jf=new JFrame("窗口测试");
JMenuBar bar=new JMenuBar();
JMenu file=new JMenu("菜单 ");
JMenuItem createfile=new JMenuItem("创建文件");
createfile.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK));
createfile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("创建文件被点击");
}
});
file.add(createfile);
bar.add(file);
jf.setJMenuBar(bar);
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
2.带滚动条的文本框
需注意的有两点:
1.默认的滚动条,仅在输入的文本超过文本框时才会显示。。没有超过文本框是不会显示的;
2.设置矩形大小,是在滚动条上设置,而不是在文本框上设置;
列如:
public class MainView extends JFrame{
public static void main(String[] args) {
MainView mv=new MainView();
mv.setLayout(null);
//实例化文本框
JTextArea jta= new JTextArea();
//在文本框上添加滚动条
JScrollPane jsp = new JScrollPane(jta);
//设置矩形大小.参数依次为(矩形左上角横坐标x,矩形左上角纵坐标y,矩形长度,矩形宽度)
jsp.setBounds(13, 10, 350, 340);
//默认的设置是超过文本框才会显示滚动条,以下设置让滚动条一直显示
jsp.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
//把滚动条添加到容器里面
mv.add(jsp);
mv.setSize(400, 400);
mv.setVisible(true);
mv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}