osman mert
osman mert

Reputation: 13

java GUI Form open other form onclick button

I am trying to do when clicked button from form1 open form2. Its sounds very simple but i coudnt find any way to do this.I am using java intellij. When i use netbeans and swing i was doing this with : "Form2 form2=new Form2();

form2.setVisible(true);

dispose(); "

Form1(Main):

public class Main {
    private JButton b_show;
    private JButton b_Add;
    private JPanel jp_main;


    public Main() {

        b_show.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {

            }
        });
    }


    public static void main(String[]args){
        JFrame frame=new JFrame();
        frame.setContentPane(new Main().jp_main);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        frame.setVisible(true);


    }

}

form2(Show):

public class Show {
    private JButton b_back;
    public JPanel jpanelmain;


    public Show() {
        Show show=new Show();
        geriButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {

            }
        });
    }

    public static void main(String[]args){
        JFrame frame=new JFrame();
        frame.setContentPane(new Show().jpanelmain);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        frame.setVisible(true);

    }

}

is any one can help me ?

when click b_show open form2(Show).

Upvotes: 1

Views: 4772

Answers (2)

c0der
c0der

Reputation: 18792

Here is an mcve demonstrating it

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {

    private final JButton b_show;
    private final JPanel jp_main;

    public Main() {
        jp_main = new JPanel();
        b_show = new JButton("Show");
        b_show.addActionListener(actionEvent -> {
            new Show();
        });
        jp_main.add(b_show);
    }
    public static void main(String[]args){
        JFrame frame=new JFrame();
        frame.setContentPane(new Main().jp_main);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        frame.setVisible(true);
    }
}

class Show {
    private JButton b_back;
    public JPanel jpanelmain;


    public Show() {
        createAndShowGui();
    }

    void createAndShowGui(){

        JFrame frame=new JFrame();
        frame.setLocationRelativeTo(null);
        jpanelmain = new JPanel();
        b_back = new JButton("Back");
        jpanelmain.add(b_back);
        frame.setContentPane(jpanelmain);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        frame.setVisible(true);
    }
} 

However, please read The Use of Multiple JFrames: Good or Bad Practice?

Upvotes: 2

André Spironello
André Spironello

Reputation: 146

The best way to do this would be using JDialogs. When actionPerformed() at 'Form1' is called, you would instantiate a new JDialog and set him visible. Here is an example:

public class Show extends JDialog {

    private JButton b_back;
    public JPanel jpanelmain;

    public Show(Frame owner, boolean modal) {
        super(owner, modal);
    }

    //method that creates the GUI   
}



b_show.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        Show show = new Show(JOptionPane.getFrameForComponent(this), true);
        show.setVisible(true);
    }
});

Finally, when you want to close the dialog, implement an actionPerformed() in it, and call the dispose() method

Upvotes: 1

Related Questions