将局部变量传递到JTextbox

时间:2014-02-09 04:11:03

标签: java swing user-interface

我正在研究Java中的编程挑战,我创建了一个带有3个框的GUI,用于输入A,B和C中的数字,然后我有一个操作顺序框,用户输入A,B,C ,以及他们选择的数学运算符。单击“计算”按钮时,数学运算的结果将显示在结果文本框中。

编辑以获得更好的解释:

  1. 用户在A,B和C两个或多个字段中输入数字。
  2. 用户在表达式字段中输入表达式。
  3. 当用户单击Solve按钮时,将评估表达式并将结果显示在Result字段中。
  4. 这是我到目前为止所做的。

    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    
    /*The string builder class allows the user to enter numbers into the UI
    * The UI converts the Textbox input from strings to Floats and stores them in local variables
    * A, B, and C
    */
    
        public class StringBuildUI extends JFrame
        {
            //declare all variables, constants, and components for the GUI
    
            private JPanel panel;                   // a panel to hold the gui components
            private JLabel messageLabelA;           // a label for the Text Field A
            private JLabel messageLabelB;           // a label for the Text Field B
            private JLabel messageLabelC;           // a label for the Text Field C
            private JLabel messageLabelR;           // a label for the Text Field results
            private JLabel messageLabelO;           // a label for the Text Field order of ops
            private JTextField boxA;                // a box to hold user input
            private JTextField boxB;                 // a box to hold user input
            private JTextField boxC;                // a box to hold user input
            private JTextField order;               // a box to determine order of operations
            private JTextField results;             // a box to hold user input
            private JButton calcButton;             // a button to calculate strings
            private JButton clearButton;            // a button to clear all text fields
            private JButton exitButton;             // a button to exit the program
            private final int WINDOW_WIDTH = 750;   //window width
            private final int WINDOW_HEIGHT = 350;  //window height
    
    /*
    Constructor method for the GUI
     */
    
        public StringBuildUI ()
        {
    
            //set title
            setTitle("String Evaluator");
    
            //set size of the window
            setSize(WINDOW_WIDTH,WINDOW_HEIGHT);
    
            //build the panel and add it to the frame and display the window
            buildPanel();
            add(panel);
            setVisible(true);
        }
    
     /*
     build panel adds label, text fields and all the buttons to the panel
     */
    
        private void buildPanel()
        {
            //create the label for the text boxes, the boxes, and the buttons
            messageLabelA = new JLabel("A");
            messageLabelB = new JLabel("B");
            messageLabelC = new JLabel("C");
            messageLabelR = new JLabel("Results");
            messageLabelO = new JLabel("Order of Operations");
            boxA = new JTextField(10);
            boxB = new JTextField(10);
            boxC = new JTextField(10);
            order = new JTextField(10);
            results = new JTextField(10);
            calcButton = new JButton("calculate");
            clearButton = new JButton(" Clear Fields");
            exitButton = new JButton("Exit");
    
            //Group the buttons, and add them to the panel
            add(calcButton);
            add(clearButton);
            add(exitButton);
    
            //Create a panel and add components to it
            panel = new JPanel();
            panel.add(messageLabelA);
            panel.add(boxA);
            panel.add(messageLabelB);
            panel.add(boxB);
            panel.add(messageLabelC);
            panel.add(boxC);
            panel.add(messageLabelO);
            panel.add(order);
            panel.add(messageLabelR);
            panel.add(calcButton);
            panel.add(clearButton);
            panel.add(exitButton);
        }
      /*
      Private inner class for event handling when the user clicks buttons
       */
    
        private class ButtonListener implements ActionListener
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
              String inputA;    // holds user input from text box a
              String inputB;    // holds user input from text box b
              String inputC;    // holds user input from text box c
              Float   results;  // holds results of calculations
              Float A,B,C;      // holds converted strings for calculations
              //get string input
              inputA = boxA.getText();
              inputB = boxB.getText();
              inputC = boxC.getText();
    
              //Convert strings to integers
              A = Float.parseFloat(inputA);
              B = Float.parseFloat(inputB);
              C = Float.parseFloat(inputC);
    
             //get input from order of operations box
             Float inputABC;
             inputABC = order.getFloat();
            }
    

    我转换到早期吗? 我想拿A B和C并在我的事件处理中使用它们来计算按钮,这样结果将基于用户输入。在我的脑海中,我认为我可以将数学运算基于用户输入的唯一方法是变量A B和C是字符串,但我不确定。

    如何从框中传递文本输入并在事件处理中使用它们?

    感谢。

    编辑回答问题:数学运算是用户定义的,所以我不能将它们放入我的计算按钮的事件处理程序中。我还没有开始编写计算按钮的代码,因为我不确定如何处理用户输入。

2 个答案:

答案 0 :(得分:2)

您可以在合适的时间获取数据并进行转换,但我不会看到您使用数字进行任何计算或设置结果字段文本。 ActionListener的actionPerformed最后需要results.setText(...)方法调用。

除此之外,您还需要学习并遵守Java命名标准,包括给出以小写字母开头的变量名称。您还需要使用“自我评论”的名称,并使您的代码更容易理解。

除此之外,你应该几乎不要使用浮动,因为这样做可以获得很高的精度和成本。

答案 1 :(得分:0)

您可以使用getText()。trim()来删除ABC顺序中的任何空格。

此外,您还可以将结果框设置为setEditable(false)。

现在关于这个问题,您可以使用String的toCharArray()方法来比较在Order Box中输入的每个3个字符。这是该方法的简短实现:

String s1 = "ABC";
char[] a = s1.toCharArray();
if(a[0]=='A' && a[1]=='B')
System.out.println("ABC");