1、记事本文本面板
import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class NotepadFrame extends JFrame{
private static final long serialVersionUID = -6328781535000523502L;
private JScrollPane jsp;
private JTextArea jta;
private JMenuBar jmb;
public NotepadFrame(String title) {
super(title);
int x, y;
int width=800,height=600;
x=(Toolkit.getDefaultToolkit().getScreenSize().width-width)/2;
y=(Toolkit.getDefaultToolkit().getScreenSize().height-height)/2-50;
this.setLayout(new BorderLayout());
this.setBounds(new Rectangle(x, y, width, height));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addComponent();
this.addMenuBar();
}
/**
* 添加组件
*/
public void addComponent() {
jta=new JTextArea();
jsp=new JScrollPane(jta);
this.add(jsp,BorderLayout.CENTER);
}
/**
* 添加菜单
*/
public void addMenuBar() {
this.jmb=new MenuBar();
this.setJMenuBar(jmb);
}
}
2、记事本菜单设计
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
public class MenuBar extends JMenuBar{
private static final long serialVersionUID = -1822798226977402168L;
public JMenu[] mainMenu;
public JMenuItem[][] subMenu;
public MenuBar() {
//main menu label
String[] mainMenuLabel={"文件(F)","编辑(E)","格式(O)","查看(V)","帮助(H)"};
//二级菜单标签
String[][] subMenuLabel={{"新建(N)","打开(O)...","保存(S)","另存为(A)...","页面设置(U)","打印(P)","退出(X)"},
{"撤销(U)","剪切(T)","复制(C)","粘贴(P)","删除(L)","查找(F)...","替换(R)...","全选(A)","日期(D)"},
{"自动换行(W)","字体(F)","颜色(C)"},
{"状态栏(S)"},{"帮助主题(H)","关于记事本(A)..."}};
//主菜单助记符
char[] mainMenuMnem={'F','E','O','V','H'};
//二级菜单助记符
char[][] subMenuMnem={{'N','O','S','A','U','P','X'},
{'U','T','C','P','L','F','R','A','D'},
{'W','F','C'},{'S'},{'H','A'}};
//二级菜单分割线,那个二级菜单下有分隔线,则为true
boolean[][] subMenuSep={{false,false,false,true,false,true,false},
{true,false,false,false,true,false,true,false,false},
{false,false,false},{false},{true,false}};
//快捷键
KeyStroke[][] subMenuKey={{KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK),
null,null,KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK),null},
{KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK),
KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)},
{null,null,null},
{null},{null,null}};
mainMenu=new JMenu[5];
subMenu=new JMenuItem[5][];
for(int i=0;i<mainMenu.length;i++) {
mainMenu[i]=new JMenu(mainMenuLabel[i]);
mainMenu[i].setMnemonic(mainMenuMnem[i]);
subMenu[i]=new JMenuItem[subMenuLabel[i].length];
for(int j=0;j<subMenu[i].length;j++) {
subMenu[i][j]=new JMenuItem(subMenuLabel[i][j]);
subMenu[i][j].setMnemonic(subMenuMnem[i][j]);
mainMenu[i].add(subMenu[i][j]);
if(subMenuSep[i][j]) mainMenu[i].addSeparator();
if(subMenuKey[i][j]!=null) subMenu[i][j].setAccelerator(subMenuKey[i][j]);
}
this.add(mainMenu[i]);
}
}
}
3、窗体及启动
public class Demo {
/**
* @param args
*/
public static void main(String[] args) {
NotepadFrame notepad=new NotepadFrame("Java版 记事本-Mr.Rong");
notepad.setVisible(true);
}
}