一、分析一下要写的记事本界面风格(当然是照葫芦画瓢了)
· 需要的swing组件如下:一个JFrame框架容器组件,一个JMenuBar菜单栏组件,五个JMenu菜单组件,二十三个JMenuItem组件,一个JTextArea文本域组件,一个JSCrollPane滚动窗格组件。
界面布局采用的是默认布局方式:BorderLayout边界布局。
二、代码实现
· 实现思路:①先定义组件(组件变量名采用缩写)
//定义菜栏条组件
private JMenuBar jmb;
//定义菜单组件
private JMenu []jm=new JMenu[5];
//定义菜单项
private JMenuItem []jmi=new JMenuItem[23];
//定义文本域组件
private JTextArea jta;
//定义滚动窗格组件
private JScrollPane jsp;
②实现组件(按照定义的顺序实现组件)
//实现组件
//实现菜单条组件
jmb=new JMenuBar();
//实现菜单组件
jm[0]=new JMenu("文件(F)");
jm[1]=new JMenu("编辑(E)");
jm[2]=new JMenu("格式(O)");
jm[3]=new JMenu("查看(V)");
jm[4]=new JMenu("帮助(H)");
//实现文件(F)菜单的菜单项组件
jmi[0]=new JMenuItem("新建(N)");
jmi[1]=new JMenuItem("打开(O)");
jmi[2]=new JMenuItem("保存(S)");
jmi[3]=new JMenuItem("另存为(A)");
jmi[4]=new JMenuItem("页面设置(U)");
jmi[5]=new JMenuItem("打印(P)");
jmi[6]=new JMenuItem("退出(X)");
//实现编辑(E)菜单的菜单项组件
jmi[7]=new JMenuItem("撤销(U)");
jmi[8]=new JMenuItem("剪切(T)");
jmi[9]=new JMenuItem("复制(C)");
jmi[10]=new JMenuItem("粘贴(P)");
jmi[11]=new JMenuItem("删除(L)");
jmi[12]=new JMenuItem("查找(F)");
jmi[13]=new JMenuItem("查找下一个(N)");
jmi[14]=new JMenuItem("替换(R)");
jmi[15]=new JMenuItem("转到(G)");
jmi[16]=new JMenuItem("全选(A)");
jmi[17]=new JMenuItem("日期/时间(D)");
//实现格式(O)菜单的菜单项组件
jmi[18]=new JMenuItem("自动换行(W)");
jmi[19]=new JMenuItem("字体(F)");
//实现格式(O)菜单的菜单项组件
jmi[20]=new JMenuItem("状态栏(S)");
//实现帮助(H)菜单的菜单项组件
jmi[21]=new JMenuItem("查看帮助(H)");
jmi[22]=new JMenuItem("关于记事本(A)");
//实现文本域组件
jta=new JTextArea();
//向滚动窗格添加文本域组件
jsp=new JScrollPane(jta);
③添加组件(逐个添加组件)
//添加组件
//向文件菜单中添加菜单项
for(int i=0;i< 7;i++)
jm[0].add(jmi[i]);
//向编辑菜单中添加菜单项
for(int i=7;i<=17;i++)
jm[1].add(jmi[i]);
//向格式菜单中添加菜单项
for(int i=18;i<=19;i++)
jm[2].add(jmi[i]);
//向查看菜单中添加菜单项
jm[3].add(jmi[20]);
//向帮助菜单中添加菜单项
for(int i=21;i<=22;i++)
jm[4].add(jmi[i]);
//向菜单栏中添加菜单
for(int i=0;i< 5;i++)
jmb.add(jm[i]);
//添加滚动窗格组件
this.add(jsp);
//设置菜单栏
this.setJMenuBar(jmb);
三、完整代码如下
package com.lhd;
import java.awt.*;
import javax.swing.*;
/**
* @author Star—小东
* Notepad 记事本GUI开发
*/
public class NotePadWindow extends JFrame{ //创建NotePadWinddow类用来建立记事本GUI
//定义窗体组件
//定义菜栏条组件
private JMenuBar jmb;
//定义菜单组件
private JMenu []jm=new JMenu[5];
//定义菜单项
private JMenuItem []jmi=new JMenuItem[23];
//定义文本域组件
private JTextArea jta;
//定义滚动窗格组件
private JScrollPane jsp;
public NotePadWindow() {
//实现组件
//实现菜单条组件
jmb=new JMenuBar();
//实现菜单组件
jm[0]=new JMenu("文件(F)");
jm[1]=new JMenu("编辑(E)");
jm[2]=new JMenu("格式(O)");
jm[3]=new JMenu("查看(V)");
jm[4]=new JMenu("帮助(H)");
//实现文件(F)菜单的菜单项组件
jmi[0]=new JMenuItem("新建(N)");
jmi[1]=new JMenuItem("打开(O)");
jmi[2]=new JMenuItem("保存(S)");
jmi[3]=new JMenuItem("另存为(A)");
jmi[4]=new JMenuItem("页面设置(U)");
jmi[5]=new JMenuItem("打印(P)");
jmi[6]=new JMenuItem("退出(X)");
//实现编辑(E)菜单的菜单项组件
jmi[7]=new JMenuItem("撤销(U)");
jmi[8]=new JMenuItem("剪切(T)");
jmi[9]=new JMenuItem("复制(C)");
jmi[10]=new JMenuItem("粘贴(P)");
jmi[11]=new JMenuItem("删除(L)");
jmi[12]=new JMenuItem("查找(F)");
jmi[13]=new JMenuItem("查找下一个(N)");
jmi[14]=new JMenuItem("替换(R)");
jmi[15]=new JMenuItem("转到(G)");
jmi[16]=new JMenuItem("全选(A)");
jmi[17]=new JMenuItem("日期/时间(D)");
//实现格式(O)菜单的菜单项组件
jmi[18]=new JMenuItem("自动换行(W)");
jmi[19]=new JMenuItem("字体(F)");
//实现格式(O)菜单的菜单项组件
jmi[20]=new JMenuItem("状态栏(S)");
//实现帮助(H)菜单的菜单项组件
jmi[21]=new JMenuItem("查看帮助(H)");
jmi[22]=new JMenuItem("关于记事本(A)");
//实现文本域组件
jta=new JTextArea();
//向滚动窗格添加文本域组件
jsp=new JScrollPane(jta);
//添加组件
//向文件菜单中添加菜单项
for(int i=0;i< 7;i++)
jm[0].add(jmi[i]);
//向编辑菜单中添加菜单项
for(int i=7;i<=17;i++)
jm[1].add(jmi[i]);
//向格式菜单中添加菜单项
for(int i=18;i<=19;i++)
jm[2].add(jmi[i]);
//向查看菜单中添加菜单项
jm[3].add(jmi[20]);
//向帮助菜单中添加菜单项
for(int i=21;i<=22;i++)
jm[4].add(jmi[i]);
//向菜单栏中添加菜单
for(int i=0;i< 5;i++)
jmb.add(jm[i]);
//添加滚动窗格组件
this.add(jsp);
//设置菜单栏
this.setJMenuBar(jmb);
//设置窗体图标
this.setIconImage((new ImageIcon("images/NotePadLogo.jpg")).getImage());
//设置窗体标题
this.setTitle("NotePad");
//设置窗体大小
this.setSize(700,500);
//设置窗体起始位置
this.setLocation(400,150);
//设置窗体关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体可见
this.setVisible(true);
}
public static void main(String[] args) {
//创建NotePad实例对象
NotePadWindow notepad =new NotePadWindow();
}
}
四、总结
遇到的问题:
①在向JFrame容器中添加JMenuBar菜单栏组件时,当初想当然用的是JFame类的add()方法,实际是setJMenuBar()方法。
②滚动条问题
错误写法:
JTextArea jta=new JTextarea();
JScrollPane jsp=new JScrollPane();
jsp.add(jta);
正确写法:
JTextArea jta=new JTextarea();
JScrollPane jsp=new JScrollPane(jta);
③有待完善
五、NotePad 的GUI界面