Beeeee
Beeeee

Reputation: 173

Using JButtons to clear JTextFields

I have assigned the JButton cl to clear, however in my program, and using (e.getSource() == cl)... it does not setText("") for each text field I am not sure wether it is because I used an array for the JTextField or what...

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class EmployeesApplet extends JApplet implements ActionListener 
{
  public JButton              sd   = new JButton ("Salaried");
  public JButton              hr   = new JButton ("Hourly");
  public JButton              cm   = new JButton ("Commissioned");
  public JButton              cl   = new JButton ("Clear"); 

  private final int    FIELDS      =  8,   
                       FIELD_WIDTH = 20;   

  private String[]     strings     = new String[FIELDS];
  private TextFieldWithLabel[] tf  = new TextFieldWithLabel[FIELDS];
  private JTextArea    ta          = new JTextArea(5,25); 

  // Add arrays for readFields() method



     public void init()
     {
      String[]  s = {"First Name", "Last Name", "Employee ID", "(a) Salaried: Weekly Salary", "(b1) Hourly 1: Rate Per Hour", 
                   "(b2) Hourly 2: Hours Worked" , "(c1) Commissioned: Rate", "(c2) Commissioned: Gross Sales" };

       //----------------------
       //  Set up the Structure
       //----------------------

       Container c = getContentPane();
       JPanel f   = new JPanel(new FlowLayout());
       JPanel b   = new JPanel(new BorderLayout(2,0));

       JPanel glb = new JPanel(new GridLayout(8,1,0,2));
       JPanel gtf = new JPanel(new GridLayout(8,1,0,2));
       JPanel flb = new JPanel(new FlowLayout());


       // Add FlowLayout to the container
       c.add(f);
       // Add BorderLayout to the FlowLayout
       f.add(b);

       //---------------------------------------
       //Add JPanels to the BorderLayout regions
       //---------------------------------------

       // Add JLables to GridLayout in West
       b.add(glb, BorderLayout.WEST);
       for (int i = 0; i < tf.length; i++)
       {
        tf[i] = new TextFieldWithLabel(s[i], FIELD_WIDTH);
        glb.add(tf[i].getLabel());
       }

       // Add JTextFeilds to GridLayout in East
       b.add(gtf, BorderLayout.EAST);
       for (int i = 0; i < tf.length; i++)
       {
        tf[i] = new TextFieldWithLabel(s[i], FIELD_WIDTH);
        tf[i].getTextField();
        gtf.add(tf[i].getTextField());
       }

       // Add JButtons to FlowLayout in South
       b.add(flb, BorderLayout.SOUTH);

       flb.add(sd);
       flb.add(hr);
       flb.add(cm);
       flb.add(cl);

       sd.addActionListener(this);
       hr.addActionListener(this);
       cm.addActionListener(this);
       cl.addActionListener(this);

       // Add JTextArea and make it not editable   
       f.add(ta);
       ta.setEditable(false);

     }

     //---------------------------------------
     //  Read all the JTextFields and 
     //  save the contents in a parallel array
     //---------------------------------------
     private void readFields()
     {
       for (int i = 0; i < tf.length; i++)  // or FIELDS
         strings[i] = tf[i].getText();
     }

     //---------------------------------------------------------------------------
     //  Returns true if required JTextFields for selected employee are not empty
     //  Checks required JTextFields in top down order,
     //    displays error in stats are for first req that is empty and places focus
     //----------------------------------------------------------------------------
     private boolean fieldsExist(int i, int i2)
     {
       for (int index = 0; index < tf.length; index++)
        {

        }  
        showStatus("field is empty");  // Diplays error message in status area
        tf[i].requestFocus();  // places focus in JTextField

        return true;
      }

     //-----------------------------------------------------------------------------------------
     //  Returns true if all non-required JTextFields for the seleceted employee are empty
     //  Checks non-required JTextFields in top-down order ,
     //    displays error message in first non-req JTextField that is not empty and places focus
     //-----------------------------------------------------------------------------------------

     private boolean fieldsEmpty(int i, int i2)
     {



       showStatus("field should be empty");  //  Diplays error message in status area
       tf[i].requestFocus();  //  Places focus in JTextField

       return true;
     }

     public void actionPerformed(ActionEvent e)
     {

       if (e.getSource() == cl)
       {
         for (int i = 0; i < tf.length; i++)
         {
           tf[i].setText("");
           tf[1].requestFocus();
         }
        }  //  End clear if


     }


}

and here is the TextFieldWithLabel class

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;

public class TextFieldWithLabel  extends JTextField
{
  private JTextField text_field;
  private JLabel         label;
  private final static int WIDTH = 20;

  public TextFieldWithLabel (String s, int w)
  {
    label      = new JLabel(s);
    text_field = new JTextField(w);
  }

  public JLabel         getLabel()     {return label;}
  public JTextField     getTextField() {return text_field;}
  public String         getText()      {return text_field.getText();}


}  

Upvotes: 0

Views: 51

Answers (1)

Arnaud
Arnaud

Reputation: 17534

You want to set the text of the text_field field of your TextFieldWithLabel, not the text of TextFieldWithLabel.

tf[i].getTextField().setText("");
tf[1].getTextField().requestFocus();

Note that you could get rid of this text_field attribute, and use TextFieldWithLabel directly as the JTextField instead .

Better yet, have TextFieldWithLabel not extend JTextField, since it has no use, it is only a container class for two components.

Upvotes: 1

Related Questions