我的记事本是这样写的 ,能够新建新的文档,但就是不知道怎么关闭
部分代码如下: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()这个函数,但事件处理不晓得怎样响应关闭这个事件,请高手帮忙!

解决方案 »

  1.   

    呵呵,你说的不是非常清晰啊。你是说,你创建了若干的tab页,每个是一个记事本。然后你现在想要关闭其中的某一个?其实就是说让这个tab页看不到,对不?那么
    notetabPane.remove(notetabPane.getSelectedComponent());
    这条应该可以满足你的要求。当然你还要更改或追加一些处理才行。想法很好!!但是,我还是想说,可能有一些问题在其中。
    例如,你打开1,2,3,4。现在你关闭4,那么你新建的是几呢?
    这就是我所说的“你还要更改或追加一些处理才行”。加油吧。要是我说的不对,就请你再仔细描述一下你的问题。
      

  2.   

    简单更改了一下,有些东西没有改,我提出思路,请你自己加以分析解决(当然,如果你认为合理)
    首先,你的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();
    }
    }