我的记事本是这样写的 ,能够新建新的文档,但就是不知道怎么关闭
部分代码如下:import java.awt.*;
import javax.swing.*;
import javax.print.*;
import java.util.*;
import java.text.*;
import java.awt.event.*;import javax.swing.event.*;
import javax.swing.text.Document;
import javax.swing.undo.UndoManager;
public class MyNoteBook extends JFrame implements ActionListener{
JTabbedPane notetabPane = new JTabbedPane();Container con = getContentPane();
JPopupMenu popMenu = new JPopupMenu();JDialog dialogFrame = new JDialog();JFileChooser filechooser = new JFileChooser();JMenuBar menubar = new JMenuBar();JTextArea[] txtArea=new JTextArea[MAX];
JScrollPane[] notescrPane=new JScrollPane[MAX];boolean bool = true;
int TAB=0,txt_control=0;//表示当前页面和当前控制页面
static int MAX=10;//表示最多创建多少个页面
JMenu menus[]= new JMenu[]
{
new JMenu("文件"),
new JMenu("编辑"),
new JMenu("格式"),
new JMenu("帮助"),
};
JMenuItem menuitems [][] =new JMenuItem[][]
{
{
new JMenuItem("新建"),
new JMenuItem("打开.."),
new JMenuItem("保存"),
new JMenuItem("另存为.."),
new JMenuItem("页面设置"),
new JMenuItem("打印"),
new JMenuItem("退出"),
},
{
new JMenuItem("撤消"),
new JMenuItem("剪切"),
new JMenuItem("复制"),
new JMenuItem("粘贴"),
new JMenuItem("查找.."),
new JMenuItem("替换.."),
new JMenuItem("全选"),
new JMenuItem("时间/日期"),
},
{
new JCheckBoxMenuItem("自动换行"),
new JMenuItem("设置字体.."),
},
{
new JMenuItem("帮助主题"),
new JMenuItem("关于.."),
},
};class handleMouse extends MouseAdapter{ @Override
public void mouseReleased(MouseEvent e) {
// TODO 自动生成方法存根
chkText();
}
}
class handleKey extends KeyAdapter{ @Override
public void keyReleased(KeyEvent e) {
// TODO 自动生成方法存根
chkText();
}
}void chkText(){
txt_control = notetabPane.getSelectedIndex();
if(txtArea[txt_control].getSelectedText()==null){
menuitems[1][1].setEnabled(false);
menuitems[1][2].setEnabled(false);
}
else if(txtArea[txt_control].getSelectedText()!=null){
menuitems[1][1].setEnabled(true);
menuitems[1][2].setEnabled(true);
}
//else if()
}
public void createMenu(){
for(int i=0;i<menus.length;i++)
{
menubar.add(menus[i]);
for(int j=0;j<menuitems [i].length;j++)
{
menus[i].add(menuitems[i][j]);
if(i==0&&j==3)
menus[0].addSeparator();
if(i==1&&j==0||j==4||j==8)
menus[1].addSeparator();
if(i==3&&j==0)
menus[3].addSeparator();
menuitems[i][j].addActionListener(this);
}
}
this.setJMenuBar(menubar);
}
public void createPopupMenu()
{
/*popMenu.add("撤消");
popMenu.addSeparator();
popMenu.add("复制");
popMenu.add("粘贴");
popMenu.add("剪切");
popMenu.addSeparator();
popMenu.add("全选"); */
JMenuItem undoItem = new JMenuItem("撤消");
undoItem.addActionListener(this);
JMenuItem cutItem = new JMenuItem("剪切");
cutItem.addActionListener(this);
JMenuItem copyItem = new JMenuItem("复制");
copyItem.addActionListener(this);
JMenuItem pasteItem = new JMenuItem("粘贴");
pasteItem.addActionListener(this);
JMenuItem selectallItem = new JMenuItem("全选");
selectallItem.addActionListener(this);
popMenu.add(undoItem);
popMenu.addSeparator();
popMenu.add(cutItem);
popMenu.add(copyItem);
popMenu.add(pasteItem);
popMenu.addSeparator();
popMenu.add(selectallItem);
}
public MyNoteBook(){
super("记事本");
this.setFocusable(true);
createMenu();
createPopupMenu();
for(int i=0;i<MAX;i++)
{
txtArea[i]=new JTextArea();
txtArea[i].addKeyListener(new handleKey());
txtArea[i].addMouseListener(new handleMouse());
txtArea[i].setVisible(true);
txtArea[i].addMouseListener(new MouseAdapter(){
//添加右击事件显示菜单
public void mouseReleased(MouseEvent e){
if(e.isPopupTrigger()) {
popMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
});
notescrPane[i]=new JScrollPane(txtArea[i],JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}
notetabPane.addTab("无标题 文本1",notescrPane[0]);
con.add(notetabPane);
setSize(400,300);
setVisible(true);
setLocation(200,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//事件处理
public void actionPerformed(ActionEvent e) {
JMenuItem XS = (JMenuItem)e.getSource();
String ID = XS.getText();
if(ID.equals("新建"))
{
doNewFile();
}
else if(ID.equals("打开.."))
{
}
else if(ID.equals("保存"))
{
}
else if(ID.equals("另存为.."))
{
}
else if(ID.equals("页面设置"))
{
}
else if(ID.equals("打印"))
{
}
else if(ID.equals("退出"))
{
}
else if(ID.equals("撤消"))
{
}
else if(ID.equals("剪切"))
{
doCut();
}
else if(ID.equals("复制"))
{
doCopy();
}
else if(ID.equals("粘贴"))
{
doPaste();
}
else if(ID.equals("查找.."))
{
}
else if(ID.equals("替换.."))
{
}
else if(ID.equals("全选"))
{
doSelectAll();
}
else if(ID.equals("时间/日期"))
{
doDateTime();
}
else if(ID.equals("自动换行"))
{
if(bool)
bool=false;
else
bool=true;
doWrap();
}
else if(ID.equals("设置字体.."))
{
doChangeFont();
}
else if(ID.equals("关于..") )
{
doAbout();
}
}void undo(){
UndoManager undomang = new UndoManager(){
private static final long serialVersionUID = -5960092671497318496L;
public void undoableEditHappened(UndoableEditEvent e) {
this.addEdit(e.getEdit());
}};
Document doc=txtArea[0].getDocument();
}
void doCut(){
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].cut();
}
void doCopy(){
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].copy();
}
void doPaste(){
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].paste();
}
void doNewFile(){
try{TAB++;
notetabPane.addTab("无标题 文本"+(TAB+1), notescrPane[TAB]);
notetabPane.setSelectedIndex(TAB);}
catch(Exception e){
JOptionPane.showMessageDialog(null,"对不起,你最多只能创建"+MAX+"个文本!");
}
}
新建文档调用donewfile()这个函数,但事件处理不晓得怎样响应关闭这个事件,请高手帮忙!
部分代码如下:import java.awt.*;
import javax.swing.*;
import javax.print.*;
import java.util.*;
import java.text.*;
import java.awt.event.*;import javax.swing.event.*;
import javax.swing.text.Document;
import javax.swing.undo.UndoManager;
public class MyNoteBook extends JFrame implements ActionListener{
JTabbedPane notetabPane = new JTabbedPane();Container con = getContentPane();
JPopupMenu popMenu = new JPopupMenu();JDialog dialogFrame = new JDialog();JFileChooser filechooser = new JFileChooser();JMenuBar menubar = new JMenuBar();JTextArea[] txtArea=new JTextArea[MAX];
JScrollPane[] notescrPane=new JScrollPane[MAX];boolean bool = true;
int TAB=0,txt_control=0;//表示当前页面和当前控制页面
static int MAX=10;//表示最多创建多少个页面
JMenu menus[]= new JMenu[]
{
new JMenu("文件"),
new JMenu("编辑"),
new JMenu("格式"),
new JMenu("帮助"),
};
JMenuItem menuitems [][] =new JMenuItem[][]
{
{
new JMenuItem("新建"),
new JMenuItem("打开.."),
new JMenuItem("保存"),
new JMenuItem("另存为.."),
new JMenuItem("页面设置"),
new JMenuItem("打印"),
new JMenuItem("退出"),
},
{
new JMenuItem("撤消"),
new JMenuItem("剪切"),
new JMenuItem("复制"),
new JMenuItem("粘贴"),
new JMenuItem("查找.."),
new JMenuItem("替换.."),
new JMenuItem("全选"),
new JMenuItem("时间/日期"),
},
{
new JCheckBoxMenuItem("自动换行"),
new JMenuItem("设置字体.."),
},
{
new JMenuItem("帮助主题"),
new JMenuItem("关于.."),
},
};class handleMouse extends MouseAdapter{ @Override
public void mouseReleased(MouseEvent e) {
// TODO 自动生成方法存根
chkText();
}
}
class handleKey extends KeyAdapter{ @Override
public void keyReleased(KeyEvent e) {
// TODO 自动生成方法存根
chkText();
}
}void chkText(){
txt_control = notetabPane.getSelectedIndex();
if(txtArea[txt_control].getSelectedText()==null){
menuitems[1][1].setEnabled(false);
menuitems[1][2].setEnabled(false);
}
else if(txtArea[txt_control].getSelectedText()!=null){
menuitems[1][1].setEnabled(true);
menuitems[1][2].setEnabled(true);
}
//else if()
}
public void createMenu(){
for(int i=0;i<menus.length;i++)
{
menubar.add(menus[i]);
for(int j=0;j<menuitems [i].length;j++)
{
menus[i].add(menuitems[i][j]);
if(i==0&&j==3)
menus[0].addSeparator();
if(i==1&&j==0||j==4||j==8)
menus[1].addSeparator();
if(i==3&&j==0)
menus[3].addSeparator();
menuitems[i][j].addActionListener(this);
}
}
this.setJMenuBar(menubar);
}
public void createPopupMenu()
{
/*popMenu.add("撤消");
popMenu.addSeparator();
popMenu.add("复制");
popMenu.add("粘贴");
popMenu.add("剪切");
popMenu.addSeparator();
popMenu.add("全选"); */
JMenuItem undoItem = new JMenuItem("撤消");
undoItem.addActionListener(this);
JMenuItem cutItem = new JMenuItem("剪切");
cutItem.addActionListener(this);
JMenuItem copyItem = new JMenuItem("复制");
copyItem.addActionListener(this);
JMenuItem pasteItem = new JMenuItem("粘贴");
pasteItem.addActionListener(this);
JMenuItem selectallItem = new JMenuItem("全选");
selectallItem.addActionListener(this);
popMenu.add(undoItem);
popMenu.addSeparator();
popMenu.add(cutItem);
popMenu.add(copyItem);
popMenu.add(pasteItem);
popMenu.addSeparator();
popMenu.add(selectallItem);
}
public MyNoteBook(){
super("记事本");
this.setFocusable(true);
createMenu();
createPopupMenu();
for(int i=0;i<MAX;i++)
{
txtArea[i]=new JTextArea();
txtArea[i].addKeyListener(new handleKey());
txtArea[i].addMouseListener(new handleMouse());
txtArea[i].setVisible(true);
txtArea[i].addMouseListener(new MouseAdapter(){
//添加右击事件显示菜单
public void mouseReleased(MouseEvent e){
if(e.isPopupTrigger()) {
popMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
});
notescrPane[i]=new JScrollPane(txtArea[i],JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}
notetabPane.addTab("无标题 文本1",notescrPane[0]);
con.add(notetabPane);
setSize(400,300);
setVisible(true);
setLocation(200,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//事件处理
public void actionPerformed(ActionEvent e) {
JMenuItem XS = (JMenuItem)e.getSource();
String ID = XS.getText();
if(ID.equals("新建"))
{
doNewFile();
}
else if(ID.equals("打开.."))
{
}
else if(ID.equals("保存"))
{
}
else if(ID.equals("另存为.."))
{
}
else if(ID.equals("页面设置"))
{
}
else if(ID.equals("打印"))
{
}
else if(ID.equals("退出"))
{
}
else if(ID.equals("撤消"))
{
}
else if(ID.equals("剪切"))
{
doCut();
}
else if(ID.equals("复制"))
{
doCopy();
}
else if(ID.equals("粘贴"))
{
doPaste();
}
else if(ID.equals("查找.."))
{
}
else if(ID.equals("替换.."))
{
}
else if(ID.equals("全选"))
{
doSelectAll();
}
else if(ID.equals("时间/日期"))
{
doDateTime();
}
else if(ID.equals("自动换行"))
{
if(bool)
bool=false;
else
bool=true;
doWrap();
}
else if(ID.equals("设置字体.."))
{
doChangeFont();
}
else if(ID.equals("关于..") )
{
doAbout();
}
}void undo(){
UndoManager undomang = new UndoManager(){
private static final long serialVersionUID = -5960092671497318496L;
public void undoableEditHappened(UndoableEditEvent e) {
this.addEdit(e.getEdit());
}};
Document doc=txtArea[0].getDocument();
}
void doCut(){
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].cut();
}
void doCopy(){
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].copy();
}
void doPaste(){
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].paste();
}
void doNewFile(){
try{TAB++;
notetabPane.addTab("无标题 文本"+(TAB+1), notescrPane[TAB]);
notetabPane.setSelectedIndex(TAB);}
catch(Exception e){
JOptionPane.showMessageDialog(null,"对不起,你最多只能创建"+MAX+"个文本!");
}
}
新建文档调用donewfile()这个函数,但事件处理不晓得怎样响应关闭这个事件,请高手帮忙!
notetabPane.remove(notetabPane.getSelectedComponent());
这条应该可以满足你的要求。当然你还要更改或追加一些处理才行。想法很好!!但是,我还是想说,可能有一些问题在其中。
例如,你打开1,2,3,4。现在你关闭4,那么你新建的是几呢?
这就是我所说的“你还要更改或追加一些处理才行”。加油吧。要是我说的不对,就请你再仔细描述一下你的问题。
首先,你的TAB变量,我更改了它的作用,用来计数最大编号。现在的效果是:你新建1,2,3三个,若关闭了3,下次新建仍然是3。但是若你关闭1或2,新建的是4。这个和windows的效果(好像有些是一致的,记不清楚了)不是很一致。若你认为必要,请思考一下如何控制(寻找到第一个未被使用的编号)。因为我也不知道你希望的是什么情形。其次,提出一些个人观点,你想要捕获异常时拒绝新建。用一句武侠里面的话:这不是正道,有点邪。就算你的效果能出来,但程序的健壮性也就被破坏无疑了。
我只更改了打开和关闭的操作,在菜单上增加了一个“关闭”。弹出菜单我没有管。关闭的是当前选中的那个。最后,菜单的处理……不是很规范,怎么说呢,这就随着你经验积累会明白的。
呵呵,言尽于此。以下 附上代码:import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.event.UndoableEditEvent;
import javax.swing.text.Document;
import javax.swing.undo.UndoManager;public class MyNoteBook extends JFrame implements ActionListener {
JTabbedPane notetabPane = new JTabbedPane(); Container con = getContentPane(); JPopupMenu popMenu = new JPopupMenu(); JDialog dialogFrame = new JDialog(); JFileChooser filechooser = new JFileChooser(); JMenuBar menubar = new JMenuBar(); JTextArea[] txtArea = new JTextArea[MAX];
JScrollPane[] notescrPane = new JScrollPane[MAX]; boolean bool = true;
int TAB = 0, txt_control = 0;// 表示当前页面和当前控制页面
static int MAX = 10;// 表示最多创建多少个页面
JMenu menus[] = new JMenu[] { new JMenu("文件"), new JMenu("编辑"),
new JMenu("格式"), new JMenu("帮助"), }; JMenuItem menuitems[][] = new JMenuItem[][] {
{ new JMenuItem("新建"), new JMenuItem("打开.."), new JMenuItem("保存"),
new JMenuItem("另存为.."), new JMenuItem("页面设置"),
new JMenuItem("打印"), new JMenuItem("关闭"),
new JMenuItem("退出"), },
{ new JMenuItem("撤消"), new JMenuItem("剪切"), new JMenuItem("复制"),
new JMenuItem("粘贴"), new JMenuItem("查找.."),
new JMenuItem("替换.."), new JMenuItem("全选"),
new JMenuItem("时间/日期"), },
{ new JCheckBoxMenuItem("自动换行"), new JMenuItem("设置字体.."), },
{ new JMenuItem("帮助主题"), new JMenuItem("关于.."), }, }; class handleMouse extends MouseAdapter { public void mouseReleased(MouseEvent e) {
// TODO 自动生成方法存根
chkText();
}
} class handleKey extends KeyAdapter { public void keyReleased(KeyEvent e) {
// TODO 自动生成方法存根
chkText();
} } void chkText() {
txt_control = notetabPane.getSelectedIndex();
if (txtArea[txt_control].getSelectedText() == null) {
menuitems[1][1].setEnabled(false);
menuitems[1][2].setEnabled(false);
} else if (txtArea[txt_control].getSelectedText() != null) {
menuitems[1][1].setEnabled(true);
menuitems[1][2].setEnabled(true); }
// else if()
} public void createMenu() {
for (int i = 0; i < menus.length; i++) {
menubar.add(menus[i]);
for (int j = 0; j < menuitems[i].length; j++) {
menus[i].add(menuitems[i][j]);
if (i == 0 && j == 3)
menus[0].addSeparator();
if (i == 1 && j == 0 || j == 4 || j == 8)
menus[1].addSeparator();
if (i == 3 && j == 0)
menus[3].addSeparator();
menuitems[i][j].addActionListener(this);
}
} this.setJMenuBar(menubar);
} public void createPopupMenu() {
/*
* popMenu.add("撤消"); popMenu.addSeparator(); popMenu.add("复制");
* popMenu.add("粘贴"); popMenu.add("剪切"); popMenu.addSeparator();
* popMenu.add("全选");
*/
JMenuItem undoItem = new JMenuItem("撤消");
undoItem.addActionListener(this);
JMenuItem cutItem = new JMenuItem("剪切");
cutItem.addActionListener(this);
JMenuItem copyItem = new JMenuItem("复制");
copyItem.addActionListener(this);
JMenuItem pasteItem = new JMenuItem("粘贴");
pasteItem.addActionListener(this);
JMenuItem selectallItem = new JMenuItem("全选");
selectallItem.addActionListener(this);
popMenu.add(undoItem);
popMenu.addSeparator();
popMenu.add(cutItem);
popMenu.add(copyItem);
popMenu.add(pasteItem);
popMenu.addSeparator();
popMenu.add(selectallItem); } public MyNoteBook() {
super("记事本");
this.setFocusable(true);
createMenu();
createPopupMenu();
for (int i = 0; i < MAX; i++) {
txtArea[i] = new JTextArea();
txtArea[i].addKeyListener(new handleKey());
txtArea[i].addMouseListener(new handleMouse());
txtArea[i].setVisible(true);
txtArea[i].addMouseListener(new MouseAdapter() {
// 添加右击事件显示菜单
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
popMenu.show(e.getComponent(), e.getX(), e.getY());
}
} });
notescrPane[i] = new JScrollPane(txtArea[i],
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}
notetabPane.addTab("无标题 文本1", notescrPane[0]);
con.add(notetabPane);
setSize(400, 300);
setVisible(true);
setLocation(200, 150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} // 事件处理 public void actionPerformed(ActionEvent e) {
JMenuItem XS = (JMenuItem) e.getSource();
String ID = XS.getText();
if (ID.equals("新建")) {
doNewFile();
} else if (ID.equals("打开..")) {
} else if (ID.equals("保存")) {
} else if (ID.equals("另存为..")) {
} else if (ID.equals("页面设置")) {
} else if (ID.equals("打印")) {
} else if (ID.equals("关闭")) {
if (notetabPane.getSelectedIndex() == TAB) {
TAB--;
}
notetabPane.remove(notetabPane.getSelectedComponent()); } else if (ID.equals("退出")) {
} else if (ID.equals("撤消")) {
} else if (ID.equals("剪切")) {
doCut();
} else if (ID.equals("复制")) {
doCopy();
} else if (ID.equals("粘贴")) {
doPaste();
} else if (ID.equals("查找..")) {
} else if (ID.equals("替换..")) {
} else if (ID.equals("全选")) {
// doSelectAll();
} else if (ID.equals("时间/日期")) {
// doDateTime();
} else if (ID.equals("自动换行")) {
if (bool)
bool = false;
else
bool = true;
// doWrap();
} else if (ID.equals("设置字体..")) {
// doChangeFont();
} else if (ID.equals("关于..")) {
// doAbout();
}
} void undo() {
UndoManager undomang = new UndoManager() {
private static final long serialVersionUID = -5960092671497318496L; public void undoableEditHappened(UndoableEditEvent e) {
this.addEdit(e.getEdit());
}
};
Document doc = txtArea[0].getDocument();
} void doCut() {
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].cut();
} void doCopy() {
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].copy();
} void doPaste() {
txt_control = notetabPane.getSelectedIndex();
txtArea[txt_control].paste();
} void doNewFile() {
try {
if (notetabPane.getComponentCount() == 10) {
JOptionPane.showMessageDialog(null, "对不起,你最多只能创建" + MAX
+ "个文本!");
return;
}
TAB++;
notetabPane.addTab("无标题 文本" + (TAB + 1), notescrPane[TAB
% notescrPane.length]);
notetabPane.setSelectedComponent(notescrPane[TAB
% notescrPane.length]);
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String args[]) {
new MyNoteBook();
}
}