He creado un frame en Java, que tiene algunos textfields and buttons en ella. Suponiendo que el usuario quiere más campos de texto (por ejemplo, para añadir más datos), quiero poner un button y cuando un usuario hace clic en the button, a continuación, un nuevo textfield debe aparecer. a continuación, el usuario puede rellenar los datos en ella y de nuevo haciendo clic en el que button otro textfield debe aparecer.
¿Cómo puedo hacer esto ? Qué código tengo que escribir para el botón para mostrar más y más campos de texto haciendo clic en el botón?
Gracias !

  • Puede usted por favor proporcione más información relacionada con lo que su estado actual de el código parece ? De modo que uno puede adivinar donde esta recién creada JTextField tiene que llegar para que se vea agradable en la Pantalla. Y por Favor proporcione más información relativa a si está trabajando con AWT/Swing/JavaFX ? Estas entradas pueden pueden proporcionar una mejor idea 🙂
  • Estoy trabajando con Swing. el problema es que no puedo acceder a más JTextFields haciendo Clic en un Jbutton
InformationsquelleAutor SunnY | 2012-09-03

2 Comentarios

  1. 3

    Sería conveniente que en lugar de agregar componentes a su JFrame directamente, se agregan a un JPanel. Aunque relacionado con su problema, echa un vistazo a este pequeño ejemplo, esperemos que podría ser capaz de darle alguna sugerencia, otra cosa me preguntan lo que está fuera de los límites.

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class JFrameExample
    {   
        private JFrame frame;
        private JButton button;
        private JTextField tfield;
        private String nameTField;
        private int count;
    
        public JFrameExample()
        {
            nameTField = "tField";
            count = 0;
        }
    
        private void displayGUI()
        {
            frame = new JFrame("JFrame Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new GridLayout(0, 1, 2, 2));
            button = new JButton("Add JTextField");
            button.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent ae)
                {
                    tfield = new JTextField();
                    tfield.setName(nameTField + count);
                    count++;
                    frame.add(tfield);
                    frame.revalidate();  //For JDK 1.7 or above.
                    //frame.getContentPane().revalidate(); //For JDK 1.6 or below.
                    frame.repaint();
                }
            });
            frame.add(button);
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    
        public static void main(String... args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    new JFrameExample().displayGUI();
                }
            });
        }
    }
    • Aquí está el trozo de código que tengo escribió, me esperan haciendo clic en el botón4, un nuevo campo de texto aparecerá ! no funciona ! ohhh private void jButton4ActionPerformed(java.awt.evento.ActionEvent evt) { jButton4.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JTextField newTextField= new JTextField(); NewJFrame a = new NewJFrame(); a.agregar(newTextField); una.validate(); a.repaint(); }
    • No No, lo que estás haciendo dentro de este actionPerformed() método que está mal. Lo que estás haciendo es – está creando un nuevo JTextField junto con el que está creando un nuevo JFrame también, y que la adición de este JTextField para este nuevo JFrame (que nunca se mostró a favor del usuario por escribir una.setVisible(true) en cualquier lugar), a pesar de que nunca se ha añadido este nuevo JTextField a su anterior JFrame, que era visible, por lo tanto, esta nueva adición no es visible en cualquier lugar desde el JFrame en la que agregó este JTextField también es nuevo y nunca establecer esta visible en cualquier lugar.
    • Por otra parte, revalidate()/repaint() no es para ser utilizado en cualquier lugar, en lugar de cada vez que hay un cambio, en términos de la adición de nuevos componentes o la eliminación de un componente de la ya visible componente, sólo entonces este revalidate()/repaint() es para ser usado, pero no en la forma que se utiliza. Por otra parte, sería recomendable, que en lugar de pegar el código para los comentarios, edita tu pregunta con el mismo y añadir un código a tu pregunta.
  2. 2

    Suponiendo que tenga un contenedor principal llamado panel y un botón variable button que ya se ha agregado a panel, usted puede hacer:

    //handle the button action event
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        //create the new text field
        JTextField newTextField = new JTextField();
        //add it to the container
        panel.add(newTextField);
        panel.validate();
        panel.repaint();
      }
    });

    Al añadir el nuevo campo de texto, usted puede necesitar para mencionar algunos diseños relacionados con características, dependiendo del gestor de diseño que está utilizando (por ejemplo, si usted usa GridBagLayout, deberá especificar las restricciones).

    • gracias. He JFrame en lugar de panel. Así que sustituye el panel.agregar(newTextField); panel.validate(); con «JFrame». pero no funciona. I haga clic en el botón, pero ningún cuadro de texto para añadir a la trama. lo siento soy nuevo en java y esta es mi primera aplicación 😉 . gracias
    • +1 para que este bien diseñado fragmento de código, aunque a veces repaint() también es necesario cuando la adición de componentes de la ya visible contenedor.
    • Tienes razón, fijo que. Gracias.
    • Aquí está el trozo de código que tengo escribió, me esperan haciendo clic en el botón4, un nuevo campo de texto aparecerá ! no funciona ! ohhh private void jButton4ActionPerformed(java.awt.evento.ActionEvent evt) { jButton4.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JTextField newTextField= new JTextField(); NewJFrame a = new NewJFrame(); a.agregar(newTextField); una.validate(); a.repaint(); }

Dejar respuesta

Please enter your comment!
Please enter your name here