我已经设计好界面,可是没有实现动态效果,如点击保存如何弹出保存的对话框将其保存到所选的文件中,如何设计菜单监听?实现如普通记事本的基本功能?
以下是我所设计的界面:
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
public class TestMenu1 {
public static JMenuBar getMenu(String[] menu,String[][] menuItem){
JMenuBar jmb = new JMenuBar();
for(int i=0;i<menu.length;i++){
JMenu jm = new JMenu(menu[i]);
jmb.add(jm);
for(int j=0;j<menuItem[i].length;j++){
if("".equals(menuItem[i][j])){
//不用!=比较,只有String与null比时才用
    jm.addSeparator();//添加分隔线
}else {
JMenuItem jmi = new JMenuItem(
menuItem[i][j]);
jm.add(jmi);
//jm.addSeparator();//添加分隔线
//jmi.addActionListener();
}

}
}
return jmb;//不可少
}
public TestMenu1(){
JFrame jf = new JFrame("Menu");
String[] jm = {"文件","编辑","查看","收藏"};
//二维数组的写法
String[][] jmi = {{"打开","编辑","打开方式","","保存","另存为"},
          {"剪贴","复制","","复制到文件"},
          {"工具栏","","状态栏","浏览器栏"},
          {"添加到收藏夹","整理收藏夹"}};

JMenuBar jmb = getMenu(jm,jmi);//调用方法

jf.setJMenuBar(jmb);
jf.setSize(300,200);
jf.setLocation(300,200);//设置窗口位置
jf.setVisible(true);//尽可能放后
jf.setResizable(false);//窗口大小固定
jf.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestMenu1();
}
}

解决方案 »

  1.   

    调用 JMenuItem 对象的 addActionListener 方法。下面是一个例子(另外看看本栏中的推荐贴:如何贴代码):
    import javax.swing.*;
    import java.awt.HeadlessException;
    import java.awt.BorderLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;/**
     * 单击菜单项保存文件
     */
    public class TestSaveToFileMenu {    // 程序入口
        public static void main(String[] args) {
            new SaveToFileFrame().setVisible(true);
        }
    }// 包含了保存文件菜单的窗体
    class SaveToFileFrame extends JFrame {    // 保存文件对话框
        private JFileChooser dialog = new JFileChooser();    private JFrame thisFrame = this;    // 菜单事件侦听器。重点看这里。
        private ActionListener saveActionListener = new ActionListener() {        public void actionPerformed(ActionEvent e) {            if (dialog.showSaveDialog(thisFrame) == JFileChooser.APPROVE_OPTION) {
                    try {
                        // saveToFile 方法在最后面定义了
                        saveToFile(dialog.getSelectedFile());
                        thisFrame.setTitle("文件保存完毕。");
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        };    // 构造方法
        SaveToFileFrame() throws HeadlessException {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300, 100);
            setLocation(200, 100);        add(createMenuBar(), BorderLayout.NORTH);
        }    // 创建菜单项
        private JMenuBar createMenuBar() {
            JMenuBar bar = new JMenuBar();
            JMenu fileMenu = new JMenu("文件");
            JMenuItem menuItem = new JMenuItem("保存为...");
            menuItem.addActionListener(saveActionListener);
            fileMenu.add(menuItem);
            bar.add(fileMenu);
            return bar;
        }    // 将一段文本保存在指定的文件中
        private void saveToFile(File file) throws IOException {
            if (!file.exists()) {
                file.createNewFile();
                PrintWriter writer = new PrintWriter(file);
                writer.println("您选择了把文件保存在这里:" + file.getAbsolutePath());
                writer.close();
            }
        }
    }