1

So I've tried to make a button open a JFrame from a different class as well as from within the same class just as part of a different method and I'm totally lost. Here's the code. The instances where I am first trying to make a button open a new JFrame is at the "mal" and "fem" Action Listeners.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class InteractiveName {
public String name = "blank";
public String gender = "blank";
public InteractiveName()
{
    frame1();
    frame2();
    frame3();
}

public void frame1(){


    JFrame j = new JFrame("Interactive Person Identifier");
    JPanel p = new JPanel(new GridBagLayout());
    JButton mal = new JButton("Male");
    JButton fem = new JButton("Female");


    j.setSize(400,400);
    j.setVisible(true);
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    j.setLocationRelativeTo(null);
    GridBagConstraints c = new GridBagConstraints();

    c.insets = new Insets(40,40,40,40);

    c.gridx = -2;
    c.gridy = 0;
    p.add(mal,c);

    c.gridx = 2;
    c.gridy = 0;
    p.add(fem,c);

    mal.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e){
            gender = "male";

        }



    });

    fem.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e){
            gender = "female";
            j2.setVisible(true);


        }



    });

    j.add(p, BorderLayout.SOUTH);
}

public void frame2(){

    JFrame j2 = new JFrame("Interactive Person Identifier");
    JPanel p2 = new JPanel(new GridBagLayout());
    JButton conf = new JButton("Confirm");
    JTextField nameinput = new JTextField();



    j2.setVisible(false);
    j2.setSize(400, 400);
    j2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    j2.setLocationRelativeTo(null);
    GridBagConstraints c2 = new GridBagConstraints();


    c2.insets = new Insets(40,40,40,40);

    j2.add(p2, BorderLayout.SOUTH);

    c2.gridx = 0;
    c2.gridy = 2;       
    p2.add(nameinput, c2);

    c2.gridx = 0;
    c2.gridy = 0;
    p2.add(conf,c2);

    conf.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent ae){

             name = nameinput.getText();


        }



    });




}


public void frame3(){

    JFrame f3 = new JFrame("Confirmation");
    JPanel p3 = new JPanel(new GridBagLayout());
    JButton yes = new JButton("Yes");
    JButton no = new JButton("No");
    JLabel thankyou = new JLabel("Thank you for your participation. Is the above information correct?");
    JLabel info = new JLabel("You are a " + gender + ". You name is "+name+".");

    f3.setVisible(false);
    f3.setSize(400,400);
    f3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f3.setLocationRelativeTo(null);
    f3.add(p3);


    GridBagConstraints c3 = new GridBagConstraints();

    c3.insets = new Insets(40,40,40,40);

    c3.gridx = -3;
    c3.gridy = -2;
    p3.add(yes,c3);

    yes.addActionListener(new ActionListener(){

        public void actionPerformed( ActionEvent aae){

            JOptionPane.showMessageDialog(null, "This program is over");
            System.exit(0);
        }

    });

    no.addActionListener(new ActionListener(){


        public void actionPerformed(ActionEvent aeeee){

            JOptionPane.showMessageDialog(null, "You're an idiot, have fun starting over.");
            System.exit(0);


        }

    });


    c3.gridx = -3;
    c3.gridy = 2;
    p3.add(no,c3);

    c3.gridx = 0;
    c3.gridy = 0;
    p3.add(info,c3);

    c3.gridx = 0;
    c3.gridy = -1;
    p3.add(thankyou,c3);


}






}
niceman
  • 2,653
  • 29
  • 57
Forceful
  • 11
  • 1
  • 2
  • See also [The Use of Multiple JFrames, Good/Bad Practice?](http://stackoverflow.com/q/9554636/418556) – Andrew Thompson Dec 20 '14 at 11:31
  • `JButton mal = new JButton("Male"); JButton fem = new JButton("Female");` these should be `JRadioButton` objects in a [`ButtonGroup`](https://docs.oracle.com/javase/8/docs/api/javax/swing/ButtonGroup.html).. – Andrew Thompson Dec 20 '14 at 11:34

4 Answers4

1

One approach to initialize the JFrame from the same class:

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Try extends JFrame implements ActionListener{

    JButton button=new JButton("Button");
    public Try(){
      setLayout(new FlowLayout());
      button.addActionListener(this);
      add(button);
    }

public void actionPerformed(ActionEvent event){
    JFrame newFrame=new JFrame();
    newFrame.setVisible(true);
    newFrame.setSize(new Dimension(500,400));
    }

public static void main(String[] args) {

    Try t=new Try();
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t.setVisible(true);
    t.setSize(new Dimension(500,400));  
 }

}

You can add an action listener to the button in the first frame and inside the actionPerformed method,initialize another frame. Thanks.

hermit
  • 1,048
  • 1
  • 6
  • 16
0

All you have to do is add an ActionListener to the JButton, once clicked you can simply instantiate the new frame. Something similar to this:

  fem.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        dispose();

        SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          MyNewFreame newFrame = new MyNewFrame();
          newFrame.setVisible(true);
        }
        });

    }
 });

Obviously whatever you want to do once the actionPerformed occurs is entirely up to you. If you don't understand something, just ask.

Juxhin
  • 5,068
  • 8
  • 29
  • 55
0

A quick fix would be adding the implements ActionListener next to the public class.

The class usually recognizes the ActionListener as soon as you run it.

CA1K
  • 35
  • 8
0

Try this one. I run this code in Netbeans and it works well.

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

public class NewJFrame extends javax.swing.JFrame {

public NewJFrame() {
    initComponents();
    frame1();
}



// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jTextField1 = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTextField1.setText("jTextField1");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(140, 140, 140)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(164, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap(169, Short.MAX_VALUE)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(111, 111, 111))
    );

    pack();
}// </editor-fold>                        


public String name = "blank";
public String gender = "blank";


public void frame1(){


JFrame j = new JFrame("Interactive Person Identifier");
JPanel p = new JPanel(new GridBagLayout());
JButton mal = new JButton("Male");
JButton fem = new JButton("Female");


j.setSize(400,400);
j.setVisible(true);
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setLocationRelativeTo(null);
GridBagConstraints c = new GridBagConstraints();

c.insets = new Insets(40,40,40,40);

c.gridx = -2;
c.gridy = 0;
p.add(mal,c);

c.gridx = 2;
c.gridy = 0;
p.add(fem,c);

mal.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        gender = "male";
        frame2();
    }

});

fem.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        gender = "female";
        frame2();
    }

});

j.add(p, BorderLayout.SOUTH);
}

public void frame2(){

JFrame j2 = new JFrame("Interactive Person Identifier");
JPanel p2 = new JPanel(new GridBagLayout());
JButton conf = new JButton("Confirm");
JTextField nameinput = new JTextField();

 nameinput.setPreferredSize(new Dimension(200, 40));
j2.setVisible(true);
j2.setSize(400, 400);
j2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j2.setLocationRelativeTo(null);
GridBagConstraints c2 = new GridBagConstraints();


c2.insets = new Insets(40,40,40,40);

j2.add(p2, BorderLayout.SOUTH);

c2.gridx = 0;
c2.gridy = 2;       
p2.add(nameinput, c2);

c2.gridx = 0;
c2.gridy = 0;
p2.add(conf,c2);

conf.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent ae){

         name = nameinput.getText();
frame3();

    }

});

}


public void frame3(){

JFrame f3 = new JFrame("Confirmation");
JPanel p3 = new JPanel(new GridBagLayout());
JButton yes = new JButton("Yes");
JButton no = new JButton("No");
JLabel thankyou = new JLabel("Thank you for your participation. Is the above information correct?");
JLabel info = new JLabel("You are a " + gender + ". You name is "+name+".");

f3.setVisible(true);
f3.setSize(600,400);
f3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f3.setLocationRelativeTo(null);
f3.add(p3);
info.setPreferredSize(new Dimension(600, 20));
thankyou.setPreferredSize(new Dimension(600, 20));
GridBagConstraints c3 = new GridBagConstraints();

c3.insets = new Insets(40,40,40,40);

c3.gridx = -3;
c3.gridy = -2;
p3.add(yes,c3);

yes.addActionListener(new ActionListener(){

    public void actionPerformed( ActionEvent aae){

        JOptionPane.showMessageDialog(null, "This program is over");
        System.exit(0);
    }

});

no.addActionListener(new ActionListener(){


    public void actionPerformed(ActionEvent aeeee){

        JOptionPane.showMessageDialog(null, "You're an idiot, have fun starting over.");
        System.exit(0);


    }

});


c3.gridx = -3;
c3.gridy = 2;
p3.add(no,c3);

c3.gridx = 0;
c3.gridy = 0;
p3.add(info,c3);

c3.gridx = 0;
c3.gridy = -1;
p3.add(thankyou,c3);


}


public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(false);

        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JTextField jTextField1;
// End of variables declaration                   
}
chalitha geekiyanage
  • 6,464
  • 5
  • 25
  • 32