简体   繁体   English

如何将控制台迁移到摆动应用程序

[英]How to migrate console to swing application

I have a basic calculation program and I've started to build a GUI and I have a window. 我有一个基本的计算程序,已经开始构建GUI,并且有一个窗口。 My question, is how do I connect the two things together? 我的问题是,如何将这两件事联系在一起? I heard I should have made the GUI first but that confused me further. 我听说我应该先制作GUI,但这使我更加困惑。

I would like to be able to know how to connect my back end to the front end (GUI) 我想知道如何将后端连接到前端(GUI)

public class Calc_functions {

    //declaring subtraction feild
    public int Sub (int num1, int num2) {
        //returns the value num1 subtract num2
        return num1 - num2;
    }

    //declaring addition field
    public int Add (int fnum, int snum) {
        //returns the value num1 add num2
        return fnum + snum;
    }

    //declaring division field
    public int Div (int fnum, int snum) {
        //returns the value num1 divided by num2
        return fnum / snum;
    }

    //declaring multiplication field
    public int Mult (int fnum, int snum) {
        //returns the value num1 multiplied by num2
        return fnum * snum;
    }

}

import java.util.Scanner;

public class calc_main {

    public static void main(String[] args) {
        // calls for the Calc_functions class
        Calc_functions math = new Calc_functions ();
        //waits for user imputs and then store it as a variable
        Scanner numbers = new Scanner(System.in);
        //prints out too interface
        System.out.println("Calulator : Enter two numbers and choose a mathmatic symbol + - x /");
        System.out.println("_____________________");
        //prints out too interface
        System.out.print("First number:");
        int num1 = numbers.nextInt();
        //prints out too interface
        System.out.print("Second number:");
        int num2= numbers.nextInt();
        //prints out too interface
        System.out.print("Enter symbol +  -  x  / of the calculation you would like to perform :");
        String operation= numbers.next();

        // if the user has inputted +, it will carry out the addition of the two variables the user has unputted.
        if (operation.equals("+"))
            System.out.println(math.Add(num1, num2));
        // if the user has inputted -, it will carry out the addition of the two variables the user has unputted.
        else if (operation.equals("-"))
            System.out.println(math.Sub(num1, num2));
        // if the user has inputted x, it will carry out the addition of the two variables the user has unputted.
        else if (operation.equals("x"))
            System.out.println(math.Mult(num1, num2));
        // if the user has inputted /, it will carry out the addition of the two variables the user has unputted.
        else if (operation.equals("/"))
            System.out.println(math.Div(num1, num2));
        else
            System.out.println("The operation is not valid.");

        numbers.close();
        System.exit(0);
    }

}

import javax.swing.*;

// some code used from docs.oracle.com
public class Calc_gui {

    private static void GUI(){
        JFrame createshowGUI = new JFrame("Calc_gui");
        createshowGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Add the ubiquitous "Hello World" label.
        JLabel label = new JLabel("calcgui");
        createshowGUI.getContentPane().add(label);

        //Display the window.
        createshowGUI.pack();
        createshowGUI.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                GUI();
            }
        });
    }

}

For such a simple task you won't need a "backend" and a "frontend". 对于这样一个简单的任务,您将不需要“后端”和“前端”。 For this use case , it is sufficient to call your calculations and the respective action methods of your gui components. 对于此用例 ,只需调用您的计算以及gui组件的相应操作方法即可。 Action methods means that you add eg an ActionListener to a JButton which then executes the corresponding command, for example execute an addition. 动作方法意味着您向JButton添加例如ActionListener ,然后执行相应的命令,例如执行加法。

You could then extract the code that needs to be executed for the 4 cases into listeners, for example (pseudo code, didn't compile it!): 然后,您可以将这4种情况下需要执行的代码提取到侦听器中,例如(伪代码,未编译!):

void actionPerformed(ActionEvent e)
{    //listener for add-button
    int num1 = Integer.parse(textfield1.getText());
    int num2 = Interger.parse(textfield2.getText());
    textField3.setText(String.valueOf( math.add(num1, num2) ) );
}

...and then wire them to the buttons via addActionListener . ...然后通过addActionListener它们连接到按钮。

The code above get's two values from two textfields and tries to convert them to int values. 上面的代码从两个文本字段获取两个值,并尝试将它们转换为int值。 Then it calls your calculation method. 然后它调用您的计算方法。 There are ways to add a listener to multiple buttons and detect which button was pressed (by comparing the source of the event with the component), so you won't need to duplicate all that "get and set values form textfields" code. 有多种方法可以将侦听器添加到多个按钮并检测按下了哪个按钮(通过将事件的来源与组件进行比较),因此您无需重复所有“从文本字段获取和设置值”代码。

This is the basic principle. 这是基本原则。 It may not the way it should be done for more complex apps or long running operations, since executing them in the ActionListener means they're blocking the EDT and no GUI events will be processed. 对于更复杂的应用程序或长时间运行的操作,可能不是这样做的方式,因为在ActionListener执行它们意味着它们正在阻止EDT,并且不会处理任何GUI事件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM