1

I have 2 JTextField and 2 JPasswordField component in my swing java which frame looks as below: When ShowAllDetails button is clicked, all the entered details is displayed in JtextArea as shown below:

enter image description here

Below is the code for the same:

package popUpTest;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class PopUpTest
    {

        private JFrame frame;
        private JPasswordField passSourcePassword;
        private JTextField txtSourceUserName;
        private JTextField txtTargetUserName;
        private JPasswordField passTargetPassword;

        /**
         * Launch the application.
         */
        public static void main(String[] args)
            {
                EventQueue.invokeLater(new Runnable()
                    {
                        public void run()
                            {
                                try
                                    {
                                        PopUpTest window = new PopUpTest();
                                        window.frame.setVisible(true);
                                    } catch (Exception e)
                                    {
                                        e.printStackTrace();
                                    }
                            }
                    });
            }

        /**
         * Create the application.
         */
        public PopUpTest()
            {
                initialize();
            }

        /**
         * Initialize the contents of the frame.
         */
        private void initialize()
            {
                frame = new JFrame();
                frame.setBounds(100, 100, 444, 403);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.getContentPane().setLayout(null);

                JLabel lblSourceUserName = new JLabel("SourceUserName:");
                lblSourceUserName.setFont(new Font("Tahoma", Font.BOLD, 16));
                lblSourceUserName.setBounds(15, 62, 170, 20);
                frame.getContentPane().add(lblSourceUserName);

                passSourcePassword = new JPasswordField();
                passSourcePassword.setBounds(15, 153, 147, 26);
                frame.getContentPane().add(passSourcePassword);

                JLabel lblSourcePassword = new JLabel("SourcePassword:");
                lblSourcePassword.setFont(new Font("Tahoma", Font.BOLD, 16));
                lblSourcePassword.setBounds(15, 132, 147, 20);
                frame.getContentPane().add(lblSourcePassword);

                txtSourceUserName = new JTextField();
                txtSourceUserName.setBounds(16, 81, 146, 26);
                frame.getContentPane().add(txtSourceUserName);
                txtSourceUserName.setColumns(10);

                JLabel lblTargetUserName = new JLabel("TargetUserName:");
                lblTargetUserName.setFont(new Font("Tahoma", Font.BOLD, 16));
                lblTargetUserName.setBounds(240, 62, 170, 20);
                frame.getContentPane().add(lblTargetUserName);

                txtTargetUserName = new JTextField();
                txtTargetUserName.setColumns(10);
                txtTargetUserName.setBounds(241, 81, 146, 26);
                frame.getContentPane().add(txtTargetUserName);

                JLabel lblTargetPassword = new JLabel("TargetPassword:");
                lblTargetPassword.setFont(new Font("Tahoma", Font.BOLD, 16));
                lblTargetPassword.setBounds(240, 132, 147, 20);
                frame.getContentPane().add(lblTargetPassword);

                passTargetPassword = new JPasswordField();
                passTargetPassword.setBounds(240, 153, 147, 26);
                frame.getContentPane().add(passTargetPassword);

                JLabel lblEnterBelowDetails = new JLabel("Enter Below Details:");
                lblEnterBelowDetails.setFont(new Font("Tahoma", Font.BOLD, 16));
                lblEnterBelowDetails.setBounds(15, 26, 187, 20);
                frame.getContentPane().add(lblEnterBelowDetails);

                JTextArea textArea = new JTextArea();
                textArea.setBounds(15, 252, 365, 85);
                frame.getContentPane().add(textArea);

                JButton btnShowAllDetails = new JButton("Show All Details:");
                btnShowAllDetails.setBounds(15, 207, 226, 29);
                frame.getContentPane().add(btnShowAllDetails);

                btnShowAllDetails.addActionListener(new ActionListener()
                    {
                        public void actionPerformed(ActionEvent arg0)
                            {
                                textArea.append(txtSourceUserName.getText() + "\n");
                                textArea.append(passSourcePassword.getText() + "\n");
                                textArea.append(txtTargetUserName.getText() + "\n");
                                textArea.append(passTargetPassword.getText() + "\n");
                            }

                    });

            }
    }

Now instead of diplaying these 4 components on loading the main frame instead, i want to diplay these 4 components in a Pop up Window on click of a button as below:

Also on clicking of Show All Details button should work as before.(i.e. it should populate JtextArea with the values entered in Pop Up)

enter image description here

How can I achieve this?

I have gone through other blogs as well however didn't find to show such multiple JPasswordField/JTextField in popup.Any guidance would be highly appreciated.

Rahul
  • 191
  • 1
  • 11

1 Answers1

2

Just add the new components (JTextFields and JPasswordFields) within a button listener and call repaint() and revalidate() on the frame after that.

Here is a solution without proper layout:

EDIT:

package popUpTest;

import java.awt.EventQueue;

import javax.swing.*;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class PopUpTest
{

private JFrame frame;
private JPasswordField passSourcePassword;
private JTextField txtSourceUserName;
private JTextField txtTargetUserName;
private JPasswordField passTargetPassword;
private JTextArea textArea;

/**
 * Launch the application.
 */
public static void main(String[] args)
{
    EventQueue.invokeLater(new Runnable()
    {
        public void run()
        {
            try
            {
                PopUpTest window = new PopUpTest();
                window.frame.setVisible(true);
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public PopUpTest()
{
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize()
{
    frame = new JFrame();
    frame.setBounds(100, 100, 444, 403);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JButton popUpButton = new JButton("Click to Show Pop Up To Enter Detail");
    popUpButton.setBounds(15, 100, 365, 85);
    popUpButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            new MyDialog();
        }
    });
    frame.getContentPane().add(popUpButton);

    textArea = new JTextArea();
    textArea.setBounds(15, 252, 365, 85);
    frame.getContentPane().add(textArea);

    JButton btnShowAllDetails = new JButton("Show All Details:");
    btnShowAllDetails.setBounds(15, 207, 226, 29);
    frame.getContentPane().add(btnShowAllDetails);


    btnShowAllDetails.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent arg0)
        {
            textArea.append(txtSourceUserName.getText() + "\n");
            textArea.append(passSourcePassword.getText() + "\n");
            textArea.append(txtTargetUserName.getText() + "\n");
            textArea.append(passTargetPassword.getText() + "\n");
        }

    });

}

public JTextArea getTextArea() {
    return textArea;
}



private class MyDialog extends JDialog {
    private final JPasswordField passSourcePassword;
    private final JTextField txtSourceUserName;
    private final JTextField txtTargetUserName;
    private final JPasswordField passTargetPassword;

    public MyDialog() {
        setSize(600, 500);
        setLayout(null);

        JLabel lblEnterBelowDetails = new JLabel("Enter Below Details:");
        lblEnterBelowDetails.setFont(new Font("Tahoma", Font.BOLD, 16));
        lblEnterBelowDetails.setBounds(15, 26, 187, 20);
        add(lblEnterBelowDetails);

        JLabel lblSourceUserName = new JLabel("SourceUserName:");
        lblSourceUserName.setFont(new Font("Tahoma", Font.BOLD, 16));
        lblSourceUserName.setBounds(15, 62, 170, 20);
        add(lblSourceUserName);

        passSourcePassword = new JPasswordField();
        passSourcePassword.setBounds(15, 153, 147, 26);
        add(passSourcePassword);

        JLabel lblSourcePassword = new JLabel("SourcePassword:");
        lblSourcePassword.setFont(new Font("Tahoma", Font.BOLD, 16));
        lblSourcePassword.setBounds(15, 132, 147, 20);
        add(lblSourcePassword);

        txtSourceUserName = new JTextField();
        txtSourceUserName.setBounds(16, 81, 146, 26);
        add(txtSourceUserName);
        txtSourceUserName.setColumns(10);

        JLabel lblTargetUserName = new JLabel("TargetUserName:");
        lblTargetUserName.setFont(new Font("Tahoma", Font.BOLD, 16));
        lblTargetUserName.setBounds(240, 62, 170, 20);
        add(lblTargetUserName);

        txtTargetUserName = new JTextField();
        txtTargetUserName.setColumns(10);
        txtTargetUserName.setBounds(241, 81, 146, 26);
        add(txtTargetUserName);

        JLabel lblTargetPassword = new JLabel("TargetPassword:");
        lblTargetPassword.setFont(new Font("Tahoma", Font.BOLD, 16));
        lblTargetPassword.setBounds(240, 132, 147, 20);
        add(lblTargetPassword);

        passTargetPassword = new JPasswordField();
        passTargetPassword.setBounds(240, 153, 147, 26);
        add(passTargetPassword);

        JButton publishButton = new JButton("Publish");
        publishButton.setBounds(100, 200, 146, 26);
        add(publishButton);

        publishButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.append(txtSourceUserName.getText() + "\n");
                textArea.append(passSourcePassword.getText() + "\n");
                textArea.append(txtTargetUserName.getText() + "\n");
                textArea.append(passTargetPassword.getText() + "\n");
                dispose();
            }
        });


        setVisible(true);

    }
}
}

By the way: try to read about layout managers as soon as possible, because absolute coordinates are a pain in the ass ;-)

Phreneticus
  • 349
  • 2
  • 11
  • thanks Phreneticus for the solution however it shows the Jtext and Jpassword on the same frame itself but i want to display these in pop up window. – Rahul Sep 24 '18 at 09:37
  • For that, just add a new Dialog on a button click. I'll post a quick and dirty code snippet in my next answer. – Phreneticus Sep 24 '18 at 10:04
  • 1
    @Rahul I posted a new version as an edit in the original answer – Phreneticus Sep 24 '18 at 10:07
  • 2
    `setLayout(null);` **Short.** No. Use layouts. **Long.** Java GUIs have to work on different OS', screen size, screen resolution etc. using different PLAFs in different locales. As such, they are not conducive to pixel perfect layout. Instead use layout managers, or [combinations of them](http://stackoverflow.com/a/5630271/418556) along with layout padding and borders for [white space](http://stackoverflow.com/a/17874718/418556). – Andrew Thompson Sep 24 '18 at 13:11
  • Thank You Guys :) – Rahul Sep 24 '18 at 19:46