0

I have to create a Jtextfield where the user will be made to enter about 30 characters.i have created 15 separate Jtextfields and made user to enter only 2 characters in each Jtextfield.when the user enter two characters in first field it automatically jumps to next field and same continues till it reaches 30 characters.

My question is, is there a better way to create Jtextfield.Instead of creating separate 15 Jtextfields can we create one Jtextfield and divide that to 15 partitions and provide the same flow for entering characters. If this is not a good solution, please help me with a better solution. Thanks in advance

My code

    cmd1=new JLabel("Command");
    cmd1.setBounds(20, 76, 70, 30);
    cmd1.setFont(new Font("serif",Font.BOLD,13));
    commandpanel.add(cmd1);

    cmdtext1=new JTextField();
    cmdtext1.setBounds(80, 80,70,25);
    commandpanel.add(cmdtext1);

    examplelabel=new JLabel("Enter HexaDecimal values (For example : 45,1E) ");
    examplelabel.setBounds(260, 50, 250,25);
    examplelabel.setFont(new Font("serif",Font.PLAIN,12));
    commandpanel.add(examplelabel);


    delete1=new JButton("Delete");
    delete1.setBounds(606, 80, 70, 25);
    commandpanel.add(delete1);


    command11=new JTextField(2);
    command11.setBounds(155,80,25,25);      
    command11.setDocument(new JTextFieldLimit(2));
    command11.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command11.getText().length() == 2)
            {
                command12.requestFocus();
            }

        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command11);

    command12=new JTextField();
    command12.setBounds(180,80,25,25);
    command12.setDocument(new JTextFieldLimit(2));
    command12.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command12.getText().length() == 2)
            {
                command13.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command12);

    command13=new JTextField();
    command13.setBounds(205,80,25,25);
    command13.setDocument(new JTextFieldLimit(2));
    command13.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command13.getText().length() == 2)
            {
                command14.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command13);

    command14=new JTextField();
    command14.setBounds(230,80,25,25);
    command14.setDocument(new JTextFieldLimit(2));
    command14.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command14.getText().length() == 2)
            {
                command15.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command14);

    command15=new JTextField();
    command15.setBounds(255,80,25,25);
    command15.setDocument(new JTextFieldLimit(2));
    command15.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command15.getText().length() == 2)
            {
                command16.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command15);

    command16=new JTextField();
    command16.setBounds(280,80,25,25);
    command16.setDocument(new JTextFieldLimit(2));
    command16.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command16.getText().length() == 2)
            {
                command17.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command16);

    command17=new JTextField();
    command17.setBounds(305,80,25,25);
    command17.setDocument(new JTextFieldLimit(2));
    command17.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command17.getText().length() == 2)
            {
                command18.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command17);

    command18=new JTextField();
    command18.setBounds(330,80,25,25);
    command18.setDocument(new JTextFieldLimit(2));
    command18.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command18.getText().length() == 2)
            {
                command19.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command18);

    command19=new JTextField();
    command19.setBounds(355,80,25,25);
    command19.setDocument(new JTextFieldLimit(2));
    command19.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command19.getText().length() == 2)
            {
                command110.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command19);

    command110=new JTextField();
    command110.setBounds(380,80,25,25);
    command110.setDocument(new JTextFieldLimit(2));
    command110.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command110.getText().length() == 2)
            {
                command111.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command110);

    command111=new JTextField();
    command111.setBounds(405,80,25,25);
    command111.setDocument(new JTextFieldLimit(2));
    command111.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command111.getText().length() == 2)
            {
                command112.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command111);

    command112=new JTextField();
    command112.setBounds(430,80,25,25);
    command112.setDocument(new JTextFieldLimit(2));
    command112.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command112.getText().length() == 2)
            {
                command113.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command112);

    command113=new JTextField();
    command113.setBounds(455,80,25,25);
    command113.setDocument(new JTextFieldLimit(2));
    command113.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command113.getText().length() == 2)
            {
                command114.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command113);

    command114=new JTextField();
    command114.setBounds(480,80,25,25);
    command114.setDocument(new JTextFieldLimit(2));
    command114.addKeyListener(new KeyListener()
    {

        @Override
        public void keyTyped(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            // TODO Auto-generated method stub
            if(command114.getText().length() == 2)
            {
                command115.requestFocus();
            }
        }

        @Override
        public void keyPressed(KeyEvent e) 
        {
            // TODO Auto-generated method stub

        }
    });
    commandpanel.add(command114);

    command115=new JTextField();
    command115.setBounds(505,80,25,25);       
    command115.setDocument(new JTextFieldLimit(2));
    commandpanel.add(command115);

    add1=new JButton("Add");
    add1.setBounds(547, 80,56,25);
    add1.addActionListener(new ActionListener()
    {

        @Override
        public void actionPerformed(ActionEvent e)
        {
            // TODO Auto-generated method stub
         add1();

        }

    });
    commandpanel.add(add1);
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
vtx
  • 5
  • 3
  • Just use a for loop. It will be hard to get any help without you posting your code! – Gacci Aug 13 '15 at 05:35
  • Is it not possible to divide the Jtextfield to 15 partitions. – vtx Aug 13 '15 at 05:40
  • I am not able to post the image because of less reputations – vtx Aug 13 '15 at 05:42
  • Like I said, trying to get help without code is like guessing! Post your code and then you can get help! – Gacci Aug 13 '15 at 05:42
  • Get creative, at some point we all had not enough reputation! You may not be able to post images but you can post your code! – Gacci Aug 13 '15 at 05:43
  • This calls for **[tag:jformattedtextfield].** – Andrew Thompson Aug 13 '15 at 05:50
  • 1
    Use a `DocumentFilter` over a `KeyListener`, see [Implementing a Document Filter](http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter) and [DocumentFilter Examples](http://www.jroller.com/dpmihai/entry/documentfilter) for more details – MadProgrammer Aug 13 '15 at 06:07
  • 1
    I created a time field along the same concept a while back, have a look at [this example](http://stackoverflow.com/questions/11881301/best-way-to-constrain-user-to-enter-a-time-in-a-jtextfield/11881681#11881681) and [this example](http://stackoverflow.com/questions/25477999/jtextarea-filters-and-or-inputs-of-time-000000-java/25496932#25496932) to some of the complexities you might be facing – MadProgrammer Aug 13 '15 at 06:27
  • If jformattedtextfield is used then the user should compulsory enter all the values in the field may be 30charcters.If only 10 characters are entered that values cannot be printed and only the format will be display – vtx Aug 13 '15 at 06:48

2 Answers2

0

I think this is what you are looking for. Did not finish it but you get the idea!

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

public class JComponentLayout extends JFrame implements KeyListener{
    JLabel cmd1;
    JButton add1;
    JTextField cmdtext1;
    JButton delete1;
    JLabel examplelabel;


    Vector<Component> fields = new Vector<Component>(15);
    JPanel commandpanel = new JPanel(new FlowLayout());
   public static void main(String [] args){
       new JComponentLayout();
   }
   public JComponentLayout(){
  cmd1=new JLabel("Command");
    cmd1.setBounds(20, 76, 70, 30);
    cmd1.setFont(new Font("serif",Font.BOLD,13));
    commandpanel.add(cmd1);

    cmdtext1=new JTextField();
    cmdtext1.setBounds(80, 80,70,25);
    commandpanel.add(cmdtext1);

    examplelabel=new JLabel("Enter HexaDecimal values (For example : 45,1E) ");
    examplelabel.setBounds(260, 50, 250,25);
    examplelabel.setFont(new Font("serif",Font.PLAIN,12));
    commandpanel.add(examplelabel);


    for(int e = 0;  e < 15; ++e){
        JTextField command = new JTextField(2);
        command.addKeyListener(this);
        commandpanel.add(command);
        fields.add(command);
    }


    delete1=new JButton("Delete");
    delete1.setBounds(606, 80, 70, 25);
    commandpanel.add(delete1);


    add1=new JButton("Add");
    add1.setBounds(547, 80,56,25);
    add1.addActionListener(new ActionListener()
    {

        @Override
        public void actionPerformed(ActionEvent e){
            // TODO Auto-generated method stub
        }

    });

    commandpanel.add(add1);
    this.add(commandpanel);
    this.setVisible(true);
   }



    @Override
    public void keyTyped(KeyEvent e) 
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyReleased(KeyEvent e){
        JTextField source = (JTextField)e.getSource();

        // TODO Auto-generated method stub
        if(source.getText().length() == 2){
            fields.get((1 + fields.indexOf(source)) 
            % fields.size()).requestFocus();
        }       
    }

    @Override
    public void keyPressed(KeyEvent e) 
    {
        // TODO Auto-generated method stub

    }
}
Gacci
  • 1,388
  • 1
  • 11
  • 23
  • I understood with the key listener,but i want to create only one jtextfield. I tried using JFormattedtextfield but there if i enter 5 characters and format is of 30 characters,the value is not getting displayed – vtx Aug 13 '15 at 06:58
  • how can i retrieve value from jformattedtextfield and print – vtx Aug 13 '15 at 06:58
  • Sorry I dont get what you are trying to accomplish! – Gacci Aug 13 '15 at 07:06
  • I changed the Jtextfield to Jformattedtextfield and added format as (##-##-##-##-##). if i enter only two values in the field it is displaying the output as - - - - .if i enter all 5 values then it is displaying output as 55-55-55-55-55. how to print the value 55-55 when entered – vtx Aug 13 '15 at 07:12
  • can you please suggest me how to set a value to textfield – vtx Aug 17 '15 at 08:02
0

how to print the value 55-55 when entered

The formatted text field by default will only save data in a valid format. To force it so save incomplete data you need:

MaskFormatter format = new MaskFormatter("##-##-##-##-##");
JFormattedTextField textField = new JFormattedTextField( format );
textField.setFocusLostBehavior( JFormattedTextField.COMMIT );
camickr
  • 321,443
  • 19
  • 166
  • 288
  • can you please suggest me how to set a value to textfield here – vtx Aug 17 '15 at 07:48
  • I tried textfield.setValue(value) but didnt work. how to display with the same maskformatter – vtx Aug 17 '15 at 07:49
  • `thankyou . it worked` - and yet 4 days later you un accept the answer? So you think using 5 text fields is better than using one formatted text field?`how to set a value to textfield here` - did you include the mask haracters in your String? - setValue("12-34-56-78-90"); – camickr Aug 17 '15 at 20:13