这个记事本只做了个界面,里面的功能就做了三四个吧!特别适合新手学做GUI这一章。
我主要分了两大类,代码注释上面都有。
第一大类我主要把用到的所有组件全部定义了出来,这样看起来更方便一点
第二大类就是把左右的组件new出来,添加到该添加的地方。
这里注意一下 这里面是有图片标的,我把所用到的图标放到下面,你们看着能放到地方上就行,不需要图片一样,可以在百度,随便找小一点的图标就行。也可以裁剪我发的
图片找好以后,在Java项目下新建一个Folder名字为image(当然名字也可以自己改,如果改名的话,代码里面所用到的地方也要改一下,因为我是以image命名的)
代码如下所示:
package gra_face;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
public class JShiBen{
public static void main(String[] args) { //主函数
new JShiBen();
}
public JShiBen(){
/*
* 第一大类
* */
//创建窗体
JFrame ck=new JFrame("记事本");
// 菜单面板
JMenuBar cdmb;
// JMenu 可以有下一级 JMenuItem 终极菜单 不能有下一级
JMenu cd1,cd2,cd3,cd4,cd5;
JMenuItem[] cdx=new JMenuItem[25];
JMenu yj1,yj2;
JMenuItem ej1,ej2,ej3,ej4,ej5;
// JToolBar 工具条 JButton 按钮
JToolBar gjt;
JButton an1,an2,an3,an4,an5;
// JTextArea 文本域 JScrollPane 滚动条
final JTextArea wby;
JScrollPane gdt;
// Date 时间类
Calendar sj;
JLabel bq;
// 设置字体
Font zt=new Font("楷体",Font.ITALIC + Font.BOLD,18) ;
/*
* 第二大类
*/
// 一、菜单面板一栏
cdmb=new JMenuBar();
//文件
cd1=new JMenu("文件(F)");
cd1.setMnemonic('F'); //mnemonic - 表示助记符的键代码
yj1=new JMenu("新建(N)");
ej1=new JMenuItem("文档",new ImageIcon("image文档.png"));
ej2=new JMenuItem("模板",new ImageIcon("image模板.png"));
cdx[0]=new JMenuItem("打开(O)");
cdx[0].setActionCommand("打开");
cdx[1]=new JMenuItem("关闭(D)");
cdx[2]=new JMenuItem("保存(S)");
cdx[2].setActionCommand("保存");
cdx[3]=new JMenuItem("另存为(R)");
cdx[3].setActionCommand("另存为");
cdx[4]=new JMenuItem("页面设置(U)");
cdx[5]=new JMenuItem("打印(P)");
cdx[6]=new JMenuItem("退出(V)");
cdx[6].setActionCommand("退出");
yj1.add(ej1); yj1.add(ej2);
cd1.add(yj1); cd1.add(cdx[0]); cd1.add(cdx[1]); cd1.add(cdx[2]);
cd1.add(cdx[3]);
cd1.addSeparator();
cd1.add(cdx[4]); cd1.add(cdx[5]);
cd1.addSeparator();
cd1.add(cdx[6]);
//编辑
cd2=new JMenu("编辑(E)");
cd2.setMnemonic('E');
cdx[7]=new JMenuItem("撤销(U)");
cdx[8]=new JMenuItem("剪贴(T)");
cdx[9]=new JMenuItem("复制(C)");
cdx[10]=new JMenuItem("黏贴(P)");
cdx[11]=new JMenuItem("删除(L)");
cdx[12]=new JMenuItem("查找(F)");
cdx[13]=new JMenuItem("替换(H)");
cdx[14]=new JMenuItem("转到(G)");
cdx[15]=new JMenuItem("全选(A)");
cdx[16]=new JMenuItem("时间日期(D)");
cd2.add(cdx[7]); cd2.add(cdx[8]); cd2.add(cdx[9]); cd2.add(cdx[10]);
cd2.addSeparator();
cd2.add(cdx[11]); cd2.add(cdx[12]); cd2.add(cdx[13]); cd2.add(cdx[14]);
cd2.addSeparator();
cd2.add(cdx[15]); cd2.add(cdx[16]);
//格式
cd3=new JMenu("格式(O)");
cd3.setMnemonic('O');
cdx[17]=new JMenuItem("自动换行(U)");
cdx[18]=new JMenuItem("字体(T)");
cd3.add(cdx[17]); cd3.add(cdx[18]);
//查看
cd4=new JMenu("查看(V)");
cd4.setMnemonic('V');
yj2=new JMenu("缩放(V)");
ej3=new JMenuItem("放大(U)");
ej4=new JMenuItem("缩小(T)");
ej5=new JMenuItem("默认缩放(T)");
cdx[19]=new JMenuItem("状态栏(T)");
yj2.add(ej3); yj2.add(ej4); yj2.add(ej5);
cd4.add(yj2); cd4.add(cdx[19]);
//帮助
cd5=new JMenu("帮助(H)");
cd5.setMnemonic('H');
cdx[20]=new JMenuItem("查看帮助(H)");
cdx[21]=new JMenuItem("关于记事本(A)");
cd5.add(cdx[20]); cd5.add(cdx[21]);
//将菜单项文件、编辑、格式、查看、帮助一栏添加到菜单面板
cdmb.add(cd1); cdmb.add(cd2); cdmb.add(cd3); cdmb.add(cd4);
cdmb.add(cd5);
// 二、工具条一栏
gjt=new JToolBar();
an1=new JButton(new ImageIcon("image/编辑.png"));
an1.setToolTipText("打开");
an2=new JButton(new ImageIcon("image/粘贴.png"));
an2.setToolTipText("粘贴");
an3=new JButton(new ImageIcon("image/复制.png"));
an3.setToolTipText("复制");
an4=new JButton(new ImageIcon("image/剪贴板.png"));
an4.setToolTipText("剪贴板");
an5=new JButton(new ImageIcon("image/删除.png"));
an5.setToolTipText("删除");
// 将图片按钮编辑、粘贴、复制、剪贴板、删除一栏添加到工具条
gjt.add(an1); gjt.add(an2); gjt.add(an3); gjt.add(an4);
gjt.add(an5);
// 三、文本域一栏
wby=new JTextArea();
gdt=new JScrollPane(wby);
wby.setFont(zt); //设置文本域里面的字体Date
wby.setBackground(Color.pink);
// 四、时间日期
sj=Calendar.getInstance(); //抽象类Calendar Date的子类
int year=sj.get(Calendar.YEAR);
int month=sj.get(Calendar.MONTH)+1;
int day=sj.get(Calendar.DATE);
int hour=sj.get(Calendar.HOUR_OF_DAY);
int minute=sj.get(Calendar.MINUTE);
int second=sj.get(Calendar.SECOND);
int week=sj.get(Calendar.DAY_OF_WEEK);
String a =year+" / "+month+" / "+day+" "+hour+" : "+minute+" : "+second;
bq=new JLabel(a,JLabel.RIGHT);
// 将菜单面板、工具条、滚动条添加到窗体
ck.setJMenuBar(cdmb);
ck.add(gjt,BorderLayout.NORTH);
ck.add(bq,BorderLayout.SOUTH);
ck.add(gdt);
// 设置边框属性
ck.setSize(600, 500);
ck.setLocationRelativeTo(null); //居中
ck.setIconImage((new ImageIcon("image/记事本.png")).getImage());
ck.setVisible(true);
// 六、事件处理
cdx[0].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("打开")){
JFileChooser wjxz=new JFileChooser();
wjxz.setDialogTitle("选择文件");
wjxz.showOpenDialog(null);
wjxz.setVisible(true);
//知道要得到用户选择的文件路径--全路径==绝对路径
String wjlj = wjxz.getSelectedFile().getAbsolutePath();
//System.out.println(filename);
//因为这个记事本要读取的是字符文件而不是二进制文件
//所以应当选择 字符流中的Bufferedreader
//效率高
FileReader wjl = null;
BufferedReader hcl = null;
try {
wjl = new FileReader(wjlj);
hcl = new BufferedReader(wjl);
// 读取文件信息 并显示在文本框中
String s = "";
String zfc = "";
while ((s = hcl.readLine()) != null) {
zfc += (s + "\r\n");
}
// 放置到jta即可
wby.setText(zfc);
} catch (Exception aa) {
aa.printStackTrace();
} finally {
try {
wjl.close();
hcl.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
}) ;
cdx[2].addActionListener(new ActionListener(){
private Object wby;
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("保存")){
JFileChooser wjxz=new JFileChooser();
wjxz.setDialogTitle("保存");
wjxz.showSaveDialog(null);
wjxz.setVisible(true);
}
}
}) ;
cdx[3].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("另存为")){
JFileChooser wjxz=new JFileChooser();
wjxz.setDialogTitle("另存为");
wjxz.showSaveDialog(null);
wjxz.setVisible(true);
}
}
}) ;
cdx[6].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("退出")){
System.exit(0) ;
}
}
}) ;
}
}
运行效果图如下所示:
如有不懂,加微信 :zhi19990327
备注 :Java小程序之记事本