The_dream1121 2024-05-25 03:38 采纳率: 88.2%
浏览 8
已结题

在我的代码中的菜单项怎么实现跳转


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

public class Calcuiator3 {


    public static class ZhuJieMian extends JFrame implements ActionListener {
        private static final long serialVersionUID = 1L;
        //实现序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性
        JTextField x;             //文本框
        String preOperater = "";  //上一次的运算符
        double sum = 0;           //运算结果

//        public caidanlan{
//
//        }
//
//        private JMenuBar menuBar;
//        private JMenu menuFile;
//
//        public void JMDemo(){
//            JPanel caidan = new JPanel();//
//            JMenuBar caidanlan = new JMenuBar();
//            this.setJMenuBar(menuBar);
//            menuFile = new JMenu("菜单");
//            menuBar.add(menuFile);
////            miSave = new JMenuItem("简易计算器");
////            miExit = new JMenuItem("科学计算器");
////            miCopy = new JMenuItem("程序员");
//        }

        public ZhuJieMian(String title) {
            super(title);
            Container c = getContentPane();      //容器
            c.setLayout(new BorderLayout());     //容器采用边缘布局
            x = new JTextField(50);
            c.add("North", x);
            String[] buttoned = {"7","8", "9", "+/-", "C", "退格", "倒数",
                    "4", "5", "6",  "+", "-", "*", "/",
                    "1", "2", "3","sqrt", "pow", "log10", "%",
                    ".", "0","=","cos", "tan", "exp","历史"};
            JPanel p = new JPanel();      //面板
            p.setLayout(new GridLayout(4, 7, 10, 10)); //面板采用行列数3, 9的网格布局
            for (String s : buttoned) { //用一个for循环将按钮添加进面板并注册监听器
                JButton b = new JButton(s);
                p.add(b);
                b.addActionListener(this);
            }
            c.add("Center", p);
            JMenuBar menuBar = createMenuBar();
            setJMenuBar(menuBar);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        

    // 创建菜单栏
    private JMenuBar createMenuBar() {
        JMenuBar menuBar = new JMenuBar();

        // 创建文件菜单
        JMenu menuFile = new JMenu("计算器");
        menuBar.add(menuFile);

        // 创建转换子菜单
        JMenu menu1 = new JMenu("简易计算器");
        JMenu menu2 = new JMenu("科学计算器");
        JMenu menu3 = new JMenu("程序员计算器");
        menuFile.add(menu1);
        menuFile.add(menu2);
        menuFile.add(menu3);


        return menuBar;
    }

        private void binaryConversion() {
            String inputText = x.getText();
    }


        //响应用户事件,根据点击按钮实现相关操作
        public void actionPerformed(ActionEvent e) {
            String Command = e.getActionCommand();
            try {
                if (Character.isDigit(Command.charAt(0))) {//如果按钮事件为数字键
                    x.setText(x.getText() + Command);       //添加数字
                } else if (Command.equals(".")) {            //如果按钮事件为”.”键
                    xiaoshu();
                } else if (Command.equals("+/-")) {          //如果按钮事件为”+/-”键"
                    fuhao();
                } else if (Command.equals("退格")) {          //如果按钮事件为”退格”键
                    backspace();
                } else if (Command.equals("=")) {            //如果按钮事件为"=”键
                    dengyu();
                } else if (Command.equals("sqrt")) {         //如果按钮事件为"sqrt"键
                    sqrt();
                } else if (Command.equals("log")) {          //如果按钮事件为"1og”键
                    log();
                } else if (Command.equals("cos")) {          //如果按钮事件为"cos”键
                    cos();
                } else if (Command.equals("tan")) {          //如果按钮事件为”tan”键
                    tan();
                } else if (Command.equals("exp")) {          //如果按钮事件为"exp”键
                    exp();
                } else if (Command.equals("倒数")) {          //如果按钮事件为”求倒”键"
                    qiudao();
                } else if (Command.equals("C")) {            //如果按钮事件为"C"键
                    clear();
                } else if (Command.equals("历史")){           //如果按钮事件为"历史"键
                    lishi();
                } else {
                    doOperation();                     //记录运算符和输入的数字
                    x.setText("");
                    preOperater = Command;
                }
            } catch (Exception ex) {
                sum = 0;
                x.setText("");
            }
        }

        void xiaoshu() { //添加小数点
            String s = x.getText();
            if (!s.contains(".")) x.setText(s + ".");
        }

        void fuhao() { //添加负号
            String s = x.getText();
            if (!s.contains("-"))
                x.setText("-" + x.getText());
        }

        void backspace() { //退格
            String s = x.getText();
            if (s.length() > 0)
                x.setText(s.substring(0, s.length() - 1));
        } //删除最后-一个字符

        void dengyu() {
            doOperation();
            x.setText("" + sum);
            ShuJu(sum);
            preOperater = "";

        }

        void sqrt() { //求该数的平方根
            double m = Double.parseDouble(x.getText());
            if (m < 0)
                x.setText("负数不能开根号");
            else
                x.setText("" + Math.sqrt(m));
        }

        void log() { //求该数的自然对数
            double m = Double.parseDouble(x.getText());
            if (m < 0)
                x.setText("负数不能进行自然对数运算");
            else
                x.setText("" + Math.log10(m));
        }

        void cos() { //求该数的余弦
            double m = Double.parseDouble(x.getText());
            x.setText("" + Math.cos(Math.toRadians(m)));
        }

        void tan() {//求该数的正切
            double m = Double.parseDouble(x.getText());
            x.setText("" + Math.tan(Math.toRadians(m)));
        }

        void exp() { //求e的幂
            double m = Double.parseDouble(x.getText());
            x.setText("" + Math.exp(m));
        }

        void qiudao() { //求倒数
            if (Double.parseDouble(x.getText()) == 0)
                x.setText("除数不能为零");
            else {
                x.setText(" " + 1 / (Double.parseDouble(x.getText())));
                preOperater = "";
            }
        }

        void clear() { //清零
            sum = 0;
            x.setText("");
            preOperater = "";
        }

        //根据记录的运算符将前面记录的结果sum与文本框中的数据进行运算
        void doOperation() {
            double m = Double.parseDouble(x.getText());
            if (preOperater.equals("")) sum = m;     //将结果与文本框中的数据按照前一个运算符运算
            if (preOperater.equals("+")) sum = sum + m; //加法运算
            if (preOperater.equals("-")) sum = sum - m; //减法运算
            if (preOperater.equals("*")) sum = sum * m; //乘法运算
            if (preOperater.equals("/")) sum = sum / m; //除法运算
            if (preOperater.equals("%")) sum = sum % m; //求余
            if (preOperater.equals("pow")) sum = Math.pow(sum, m);
        }
        void ShuJu(double sum){
            SimpleDateFormat data=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            double s1=sum;
            Connection con = null;
            PreparedStatement ps = null;
            try {
                try {
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=KECHENGSHEJI", "shengyiguo", "gena20031121");
                con.setAutoCommit(true);
                System.out.println("已将数据添加到表格");
                String sql = "INSERT INTO shuju(日期,数据) VALUES (?,?)";
                ps = con.prepareStatement(sql);
                ps.setString(1, data.format(new Date()));
                ps.setString(2, String.valueOf(s1));
                ps.executeUpdate();
            }catch (SQLException e){
                e.printStackTrace();
            }
            try {
                if (con != null)
                    con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                if (ps != null)
                    ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        void lishi(){
            ResultSet resultSet=null;
            Connection con = null;
            Statement stat;
            PreparedStatement ps= null;
            String time;
            Double shuju;
            try {
                try {
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=KECHENGSHEJI","shengyiguo","gena20031121");
                con.setAutoCommit(true);
                stat=con.createStatement();
                String sql="SELECT 日期,数据 FROM shuju";
                resultSet=stat.executeQuery(sql);
                ps=con.prepareStatement(sql);
                System.out.println("    "+"日期"+"                "+"数据");
                while(resultSet.next()){
                    time=resultSet.getString("日期");
                    shuju=resultSet.getDouble("数据");
                    ArrayList<String> arrayList1=new ArrayList<>();
                    ArrayList<String> arrayList2=new ArrayList<>();
                    arrayList1.add(time);
                    arrayList2.add(String.valueOf(shuju));
                    Object[][] table=new Object[arrayList1.size()][2];
                    for (int i = 0; i < arrayList1.size(); i++) {
                        table[i][0]=arrayList1.get(i);
                        table[i][1]=arrayList2.get(i);
                    }

                    System.out.println(Arrays.deepToString(table));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            if (con!=null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (ps!=null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (resultSet!=null){
                try{
                    resultSet.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args) {
        JFrame x=new ZhuJieMian("计算器");
        JMenuBar menuBar = new JMenuBar();
        x.setBounds(300,100,630,290);
        //x.setSize(630,290);         //按键大小,若大小不合适则会出现文字显示不全的现象
        x.setVisible(true);
    }
}


在我的代码中的菜单项怎么实现跳转

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-25 03:38
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在您的Java Swing应用程序中,要实现菜单项的跳转功能,您需要为菜单项添加事件监听器,并在事件处理方法中定义当菜单项被点击时应该执行的操作。以下是如何为您的应用程序添加菜单项跳转功能的基本步骤:

    1. 定义新的界面:首先,您需要定义当菜单项被点击时应该跳转到的界面。这可以是一个新的JFrame或者JDialog

    2. 创建菜单项并添加事件监听器:在您的ZhuJieMian类中,为每个菜单项创建一个JMenuItem,并为它们添加ActionListener

    3. 实现事件处理方法:在actionPerformed方法中,检查触发事件的来源,并执行相应的操作,比如打开新的界面。

    以下是对您的代码进行修改以实现点击菜单项时打开新界面的示例:

    import javax.swing.*;
    
    // ... 省略其他导入和现有代码 ...
    
    public class Calcuiator3 {
    
        // ... 省略现有代码 ...
    
        public class ZhuJieMian extends JFrame implements ActionListener {
            // ... 省略现有代码 ...
    
            // 创建一个新的JFrame作为跳转的目标界面
            private JFrame newInterface = new JFrame("New Interface");
    
            // ... 省略现有代码 ...
    
            // 创建菜单栏时,为菜单项添加事件监听器
            private JMenuBar createMenuBar() {
                JMenuBar menuBar = new JMenuBar();
    
                JMenu menuFile = new JMenu("计算器");
                menuBar.add(menuFile);
    
                JMenuItem menuItemOpenNew = new JMenuItem("打开新界面");
                menuItemOpenNew.addActionListener(this); // 添加事件监听器
                menuFile.add(menuItemOpenNew);
    
                // ... 省略其他菜单项的创建 ...
    
                return menuBar;
            }
    
            // ... 省略现有代码 ...
    
            // 事件处理方法
            @Override
            public void actionPerformed(ActionEvent e) {
                // ... 省略现有代码 ...
    
                // 检查事件来源,如果是打开新界面的菜单项被点击
                if (e.getSource() == menuItemOpenNew) {
                    openNewInterface();
                }
            }
    
            // 定义打开新界面的方法
            private void openNewInterface() {
                // 设置新界面的内容,例如添加组件等
                newInterface.setSize(300, 200);
                newInterface.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                newInterface.setVisible(true);
            }
    
            // ... 省略现有代码 ...
        }
    
        // ... 省略现有代码 ...
    }
    

    在这个示例中,我添加了一个名为openNewInterface的方法,当点击"打开新界面"的菜单项时,这个方法会被调用,从而显示一个新的JFrame。您可以根据需要修改openNewInterface方法,以添加您希望在新界面中显示的内容。

    请注意,这只是一个基本示例,您可能需要根据您的具体需求进行调整。例如,您可能需要为不同的菜单项定义不同的事件处理逻辑,或者为新界面添加更复杂的功能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月11日
  • 已采纳回答 6月3日
  • 创建了问题 5月25日