I’m just starting with using interfaces in java, I’m okay with having just one window and that doing what i need. But i now want to link two windows together e.g.
Frame 1 opens. user chooses button1 (enter data). Frame 2 opens so user can enter the data.
Code for Frame 1:
import javax.swing.*; public class Task_3 extends JFrame { private Button btn1, btn2, btn3; public Task_3(){ setLayout(new FlowLayout()); btn1 = new Button("Enter data"); add(btn1); btn2 = new Button("Check who is going"); add(btn2); btn3 = new Button("View costs"); add(btn3); setTitle("Event Costs"); setSize(280, 150); setVisible(true); // close the window addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); //calling the method is a must } }); } public static void main(String[] args){ new Task_3(); } }
Code for Frame 2:
import java.awt.*; import java.awt.event.*; public class Task1GUI extends Frame implements ActionListener { private Label lblInput; private Label lblOutput; private TextField tfInput; private TextField tfOutput; private int sum = 0; public Task1GUI(){ setLayout( new FlowLayout()); lblInput = new Label("Enter number of students: "); add(lblInput); tfInput = new TextField(5); add(tfInput); tfInput.addActionListener(this); lblOutput = new Label("The cost per student is: "); add(lblOutput); tfOutput = new TextField(20); tfOutput.setEditable(false); add(tfOutput); setTitle("Task1GUI"); setSize(350, 120); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); //calling the method is a must } }); } public static void main(String[] args){ new Task1GUI(); } @Override public void actionPerformed(ActionEvent evt){ int numOfStudents = Integer.parseInt(tfInput.getText()); int coachCost = 550; int entrycost = 30; int totalcost; int numFree; int Discount; int costPerPerson; if(numOfStudents<45){ totalcost = coachCost+(numOfStudents*30); numFree = numOfStudents/10; Discount = numFree*30; costPerPerson = (totalcost-Discount)/numOfStudents; tfInput.setText(""); tfOutput.setText(costPerPerson+""); } else{ tfOutput.setText("Too mant students entered"); } } }
Basically I would like some help with linking these two programs together so that the user can open the first frame choose which action they would like to do.
I have only been working with the console up until very recently so if my code is not perfect I apologise but I would really appreciate any help with this.
I would eventually like to get this program https://repl.it/repls/FondAptXeme to have a GUI if this helps at all.
Thanks
Advertisement
Answer
I would suggest creating a new JFrame and setting the visibility of your new JFrame to “true” in the button’s action listener. Something like this:
private JFrame secondFrame = new JFrame("My 2nd Window!");
and then in your button1 action listener you do:
secondFrame.setVisible(true);
EDIT:
import javax.swing.*; public class Task_3 extends JFrame { private Button btn1, btn2, btn3; private Task1GUI task1Gui = new Task1GUI(); public Task_3(){ setLayout(new FlowLayout()); btn1 = new Button("Enter data"); btn1.addActionListener(this); //this refers to your current frame add(btn1); btn2 = new Button("Check who is going"); add(btn2); btn3 = new Button("View costs"); add(btn3); setTitle("Event Costs"); setSize(280, 150); setVisible(true); // close the window addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); //calling the method is a must } }); } public static void main(String[] args){ new Task_3(); } public void actionPerformed(ActionEvent e) { task1Gui.setVisible(true); } }
Cheers.