package Demo;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
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 java.util.Scanner;

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;
import javax.swing.JFileChooser;
public class Text2 {
    public static void main(String[] args) {
    JFrame jframe;
    JMenu jmenu1,jmenu2;
    JMenuBar jmenubar;
    JMenuItem jmenuitem1,jmenuitem2,jmenuitem3,jmenuitem4;
    JTextArea area;
    JFileChooser jfc;
    //JLabel label;
    
    jframe=new JFrame("记事本");
    jmenu1=new JMenu("文件");
    jmenu2=new JMenu("编辑");
    jmenubar=new JMenuBar();
    jmenuitem1=new JMenuItem("新建(N)");
    jmenuitem2=new JMenuItem("打开 (S)");
    jmenuitem3=new JMenuItem("另存为(A)");
    jmenuitem4=new JMenuItem("退出(X)");
    //label=new JLabel("现在没有打开的文件");
    jfc=new JFileChooser();
    area=new JTextArea(8,10);
    area.setEditable(true);
    jframe.getContentPane().add(new JScrollPane(area));
        
    jmenuitem1.setMnemonic(KeyEvent.VK_N);
    jmenuitem2.setMnemonic(KeyEvent.VK_S);
    jmenuitem3.setMnemonic(KeyEvent.VK_A);
    jmenuitem4.setMnemonic(KeyEvent.VK_X);
        
    jmenuitem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
    jmenuitem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
    jmenuitem3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
    jmenuitem4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
    
        
    jmenubar.add(jmenu1);
    jmenubar.add(jmenu2);
    jmenu1.add(jmenuitem1);
    jmenu1.add(jmenuitem2);
    jmenu1.add(jmenuitem3);
    jmenu1.add(jmenuitem4);
    //jframe.setBounds();
    jframe.setJMenuBar(jmenubar);
    jframe.setSize(400,400);
    jframe.setLocation(400,400);
    jframe.setVisible(true);
    jmenuitem1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
             area.setText("");
        }
    });
    jmenuitem3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            jfc.showOpenDialog(null);
            File file=jfc.getSelectedFile();
            try {
                if(!file.exists())
                  file.createNewFile();
                
                FileOutputStream fos = new FileOutputStream(file);
                byte[] b = area.getText().getBytes();
                fos.write(b);
                fos.close();
            } catch (IOException ex) {                      
               ex.printStackTrace();
           }
    }
    });
    jmenuitem2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            jfc.showOpenDialog(null);
            File file=jfc.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 ex) {
                   ex.printStackTrace();
           }catch (IOException ex) {
               ex.printStackTrace();
           } 
    }});
    jmenuitem4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });
    }
}

 

学习总结:

1,键盘时间及监听处理:

方法:为对键盘进行监听,可通过直接使用KeyListener接口即可。

KeyListener接口方法:

方法 类型 描述
void keyTyped(KeyEvent e) 普通 键入时某个键时调用
void keyPressed(KeyEvent e) 普通 键盘按下时调用
void keyReleased(KeyEvent e) 普通 键盘松开时调用

若想取得键盘键入的内容,可使用KeyEvent得到。

KeyEvent事件的常用方法:

方法 类型 描述
public char getKreyChar() 普通 返回键入的字符,只针对于keyTyped有意义
public int getKeyCode() 普通 返回键入字符的键码
pubilc static String getKeyText(int KeyCode) 普通 返回此键的信息。如“HOME”,“FI”或“A”等

2,单选钮:JRadioButton

含义:在多个显示的信息中选择其中一个。

JRadioButton的常用方法:

方法 普通 描述
public JRadioButton(Icon icon) 构造 建立一个单选钮,并指定图片
public JRadioButton(Icon icon,boolean selected) 构造 建立一个单选钮,并指定图片和其是否选定
public JRadioButton(String text) 构造 建立一个单选钮,并指定其文字,默认为不选定
public JRadioButton(String text,boolean selected) 构造 建立一个单选钮,并指定文字和其是否选定
public JRadioButton(String text,Icon icon,boolean selected) 构造 建立一个单选钮,并指定图片,文字和其是否选定
public void setSelscted(boolean b) 普通 设置是否选定
public boolean isSelected() 普通 返回是否被选中
public void setText(String text) 普通 设置显示文本
public void setIcon(Icon defaultIcon) 普通 设置图片

注意:为防止出现多选的问题,应将需要的选项加入按钮组(即:ButtonGroup)中

在单选钮中事件的监听由ItemListener接口进行。

ItemListener接口的方法:

方法 类型 描述
void itemStateChanged(ItemEvent e) 普通 当用户取消或选定某个选项时调用

此方法中ItemEvent事件的方法及常量

方法 类型 描述
public static final int SELECTED 常量 选项被选中
public static final int DESELECTED 常量 选项未被选中
public Object getItem() 普通 返回受事件影响的选项
public int getstateChange() 普通 返回选定状态的类型(已选择或已取消)

3复选框:JCheckBox

作用:实现N选多的操作样式。

JCheckBox类的常用方法:

方法 类型 描述
public JCheckBox(Iocn icon) 构造 创建一个带图标的对象,但不选定
public JCheckBox(Icon icon,boolean selected) 构造 创建一个带图标的对象,并指定其是否选定
public JCheckBox(String text) 构造 创建一个带文本的对象,但不选定
public JCheckBox(String text,boolean selected) 构造 创建一个带文本的对象,并指定是否选定
public JCheckBox(String text,Icon icon,boolean selected) 构造 创建一个带文本和图标的对象,并指定其是否被选定

JCheckBox和JRadioButton的事件处理监听接口是一样的,都使用ItemListener接口。

4,菜单组件:

JMnuBar组件:菜单栏组件

JMenu组件:菜单组件

JMenultem组件:菜单项组件(注意:JMenuItem可以理解为一种特殊的JButton组件,当选择某个菜单时也会触发ActionEvevnt事件)

JMenubar的常用方法:

方法 类型 描述
public JMenubar() 构造 创建新的JMenubar对象
public JMenu add(JMenu c) 普通 将指定的JMenu加入到JMenubar中
public JMenu getMenu(int index) 普通 返回指定位置的菜单
public int getMenuCount() 普通 返回菜单栏上的菜单数

JMenu的常用方法:

方法 类型 描述
public JMenu(String s)  构造 创建新的JMenu,并指定菜单的名称
public JMenuItem add(JMenuItem menuItem) 普通 增加新的菜单项
public void addSeparator() 普通 加入分隔线

JMenultem类的常用方法:

方法 类型 描述
public JMenultem(Icon icon) 构造 创建带有图标的JMenultem
public JMenultem(String text) 构造 创建带有指定文本的JMenultem
public JMenultem(String text,Icon icon) 构造 创建带有指定文本和图标的JMenultem
public JMenultem(String text,int mnemonic) 构造 创建带有指定文本的JMenultem,并指定助记符
public void setMnemonic(int mnemonic) 普通 指定菜单项的助记符(需打开菜单才有效)
publci void setAcceleerator(KeyStroke keyStroke) 普通 设置快捷键的组合键(不许打开菜单也有效)

5,文本选择框JFileChooser

作用:打开或保存文件

JFileChooser类的常用方法:

方法 类型 描述
public JFileChooser() 构造 指定用户默认的目录,在Windows中是“我的文档”,在Unix上是用户的主目录
public JFileChooser(String currentDirectoryPath) 构造 指定文件选择的目录
public File getSelectedFile() 普通 返回选择的文件
public int showSaveDialog(Component parent) throws HeadlessException() 普通 打开保存对话框,返回保存状态
public int showOpenDialog(Component parent) throws HeadlessException() 普通 打开文件选择对话框,返回打开状态
public void setDialogTitle(String dialogTitle) 普通 设置文件选择框的标题
public void setApproveButtonText(String approveButtonText) 普通 设置文件选择的接收按钮内容

文件选择框的3种放回状态:

常量 描述
public static final int APPROVE_OPTION  选择确定后返回该值
public static final int CANCEL_OPTION 选择取消后返回该值
public static final int ERROR_OPTION 选择错误后返回该值