JtextField变量抓取并用于GUI中的数值迭代



这是我为一个小型gui编写的完整代码,它可以从用户那里获取变量,并将它们返回到程序的其他部分(r.o.p)进行计算,但似乎没有传递到r.o.p,也没有观察到输出文件。

任何帮助都将不胜感激,我认为问题在于Draw New Graph命令的侦听器。感谢

代码:

    import java.text.*;
    import java.io.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    public class RungeKutta {
        // class to create slider and window
        private static File file1;
        public static double A(double v, double x, double wc, double beta) {
            return (-2 * beta * v - (Math.pow(wc, 2)) * Math.sin(x));
        }
        public static File getFile1() {
            return file1;
        }
        public static void setFile1(File file1) {
            RungeKutta.file1 = file1;
        }
        public static void main(String[] argv) throws IOException, ParseException {

            createAndShowGUI();
        }
        private static void createAndShowGUI() {
            //create and set up the window.
            JFrame frame = new JFrame("RungeKutta");
            GridLayout first = new GridLayout(14,1);
            frame.setLayout(first);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Create, name and Populate TextField   
            JTextField PL = new JTextField("Pendulum Length", 20);
            //Set TextField to Uneditable. Each will have Empty Field Below For Variables   
            PL.setEditable(false);  
            //Set Textfield for user entered dat
            JTextField PLv = new JTextField();
            //Allow input from text field to be taken

            JTextField AD = new JTextField("Angular Displacement", 20);
            AD.setEditable(false);
                JTextField ADv = new JTextField();
            JTextField AV = new JTextField("Angular Velocity", 20);
            AV.setEditable(false);
            JTextField Avv = new JTextField();
            JTextField TS= new JTextField("Time Steps", 20);
            TS.setEditable(false);
            JTextField TSv = new JTextField();
            JTextField MT = new JTextField("Max Time", 20);
            MT.setEditable(false);
            JTextField MTv = new JTextField();
            JTextField V = new JTextField("Viscosity (0-1)", 20);
            V.setEditable(false);
            JTextField Vv = new JTextField();
            //Create Button to Restart and Button to take in Values for usage



        JLabel emptyLabel = new JLabel("");
        emptyLabel.setPreferredSize(new Dimension(600,500));
        frame.getContentPane().add(PL, first);
        frame.getContentPane().add(PLv, first);
        frame.getContentPane().add(AD, first);
        frame.getContentPane().add(ADv, first);
        frame.getContentPane().add(AV, first);
        frame.getContentPane().add(Avv, first);
        frame.getContentPane().add(TS, first);
        frame.getContentPane().add(TSv, first);
        frame.getContentPane().add(MT, first);
        frame.getContentPane().add(MTv, first);
        frame.getContentPane().add(V, first);
        frame.getContentPane().add(Vv, first);
        JButton BNewGraph = new JButton("Draw New Graph"); //Button to restart entire drawing process
        frame.getContentPane().add(BNewGraph, first);
        //display the window
        frame.pack();
        frame.setVisible(true);
        class intakegui implements ActionListener
        {
            public intakegui()
            {
                    BNewGraph.addActionListener((ActionListener) this);
                    BNewGraph.setActionCommand("Click to Draw");               
            }
            @Override
            public void actionPerformed(ActionEvent e) {
             double l = Double.parseDouble(PLv.getText());
             double xi = Double.parseDouble(ADv.getText());
             double vi = Double.parseDouble(Avv.getText());
             double dt = Double.parseDouble(TSv.getText());
             double n = Double.parseDouble(MTv.getText());
             double beta = Double.parseDouble(Vv.getText());

            SimpleDateFormat dform = new SimpleDateFormat("ddMMyyyysmH");
            Date d = Calendar.getInstance().getTime();
            String dstr = dform.format(d);
            String filename = ("result " + dstr + ".txt");
            file1 = new File(filename);
            PrintWriter savedValues = null;
            try {
                savedValues = new PrintWriter(filename);
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            //declare variable for gravity and omega*c
            double g = 9.8;
            double wc = Math.sqrt(g / l);
            savedValues.println("#Initial Values Entered");
            savedValues.println("#" + l + "," + vi + "," + xi + "," + dt + "," + n
                    + "," + beta);
            double[] dispTime = new double[(int) n];
            double[] velTime = new double[(int) n];
            // let a = angular acceleration
            for (double j = 0; j < (int) n; j++) {
                // int time = 1;
                double k1v = dt * j * A(vi, xi, wc, beta);
                double k1x = dt * j * vi;
                double k2v = dt * j * A(vi, xi + (0.5 * k1x), wc, beta);
                double k2x = dt * j * (vi + (0.5 * k1v));
                double k3v = dt * j * A(vi, xi + (0.5 * k2x), wc, beta);
                double k3x = dt * j * (vi + (0.5 * k2v));
                double k4v = dt * j * A(vi, xi + k3x, wc, beta);
                double k4x = dt * j * (vi + k3v);
                xi += k1x / 6 + k2x / 3 + k3x / 3 + k4x / 6;
                vi += k1v / 6 + k2v / 3 + k3v / 3 + k4v / 6;
                dispTime[(int) j] = xi;
                velTime[(int) j] = vi;
                System.out.println(xi + "," + vi);
            }
            for (int i = 0; i < (int) n; i++) {
                savedValues.println(dispTime[i] + " " + velTime[i]);
            }
            savedValues.close();
            System.out.println("File saved. File name: " + filename);
            }   
        }   
            }
        }

您忘记将监听器添加到按钮中。您需要添加如下侦听器:

BNewGraph.addActionListener(new intakegui());

现在,当用户单击按钮时,您将看到该文件。

最新更新