user3522245
user3522245

Reputation: 5

GUI with text fields for input using Swing

Actually I'm a beginner, so I tried myself to create GUI using Swing where two input numbers are filled by the user in two respective fields, so there is a new text field where I want to add the 2 inputted value.

I want to add the integers of 2 text fields and add both the values and display in another text field. How to extract the JTextField integer values to another JTextField?

import java.io.*;
 import java.awt.*;
 import java.awt.event.*;
import javax.swing.*;
public class GUI
{
public JFrame f;
    public JPanel p;
    public JLabel l1,l2;
    public JButton b1;
    public JButton b2;
    public JTextField t1;
    public JTextField t2;
    public JTextField t3;
    public GUI()
        {
            f=new JFrame("hello world application");
            p=new JPanel(true);
            l1=new JLabel("enter first number");
            t1=new JTextField(30);
            l2=new JLabel("\n enter the second number");
            t2=new JTextField(30);
            t3=new JTextField(30);
            b1=new JButton("check here");
            b2=new JButton("clear all");
            //b1.addActionCommand1("checking....");
            //b2.addActionCommand2("clearing all input's ....");

        }
    public void launch()
        {
            f.setSize(400,500);
            p.add(l1);
            p.add(t1);
            p.add(l2);
            p.add(t2);
            p.add(t3);
            p.add(b1);
            p.add(b2);
            f.pack();
            f.add(p);

            //l.setFont(Times Roman);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            p.setSize(400,500);
            p.setForeground(Color.red);
            p.setBackground(Color.green);
            f.setLayout(new BorderLayout());
            b1.addActionListener(new Button1handler(t1,t2,t3));
            b2.addActionListener(new Button2handler());
            f.setVisible(true);


        }
    public static void main(String a[])
        {
            javax.swing.SwingUtilities.invokeLater(new Runnable()
                {
                    public void run()
                        {
                            GUI br=new GUI();
                            br.launch();

                        }
                });
        }
}

 class Button1handler implements ActionListener 
{

              private JTextField t1;
     private JTextField t2;
     private JTextField t3;
             public Button1handler(JTextField t1, JTextField t2, JTextField t3) 
                   {
                   this.t1 = t1;
                   this.t2 = t2;
                   this.t3 = t3;
    }
      public void actionPerformed(ActionEvent e)
        {
    System.out.println("action occurred for checking");
    String firstnumber=t1.getText();
    String secondnumber=t2.getText();
    int num1=Integer.parseInt(firstnumber);
    int num2=Integer.parseInt(secondnumber);
    int sum=num1+num2;
            String str=Integer.toString(sum);
            String sum2=t3.setText(str);
   JOptionPane.showMessageDialog( null, "The sum is " + sum,"Sum of Two Integers", JOptionPane.PLAIN_MESSAGE );



        }
}
class Button2handler implements ActionListener
{
    public void actionPerformed(ActionEvent r)
        {
            System.out.println("clearing all");

        }
}           

In this edited code i can retrieving the sum value in message dialog box .The problem is that i can get the particular string in the 3rd JtextField.It shows error in this line: //error: incompatible types String sum2=t3.setText(str); required: String found:void 1 error :(

Upvotes: 0

Views: 4629

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347334

Without getting to run the code, you have a problem here...

t3.setText(total);

Because JTextField does not have a setText(int) method. Instead you need to convert the value to a String.

You can use Integer.toString(total), but it might give you better results to use NumberFormat.getNumberInstance().format(total)) instead, for example

t3.setText(NumberFormat.getNumberInstance().format(total));

Updated

The "other" problem you have, which has had me running around in circles, is the fact that Button1handler extends GUI

class Button1handler extends GUI implements ActionListener {

This means, that when it access the fields t1 and t2 it's getting empty values, because these fields are not the same as the fields that are on the screen.

If your ActionListener is in a external file/class, you will need provide context to the class, for example...

class Button1handler implements ActionListener {

    private JTextField f1;
    private JTextField f2;
    private JTextField f3;

    public Button1handler(JTextField f1, JTextField f2, JTextField f3) {
        this.f1 = f1;
        this.f2 = f2;
        this.f3 = f3;
    }

    public void actionPerformed(ActionEvent e) {
        int firstnumber = Integer.parseInt(f1.getText());
        int secondnumber = Integer.parseInt(f2.getText());
        int total = firstnumber + secondnumber;
        f3.setText(NumberFormat.getNumberInstance().format(total));
    }
}

Then you'll need to create a new instance of the action handler using something like...

b1.addActionListener(new Button1handler(t1, t2, t3));

This provides the action handler with a reference to the actual fields which are been manipulated by the user on the screen...

You might be interested in Nested Classes which provides you with some additional features to egt over this requirement (of having to pass references), but you should VERY varimular with context of objects before moving onto it ;)

Upvotes: 2

Related Questions