Problem retreving data from another JFrame in Java
Hello everyone!
My idea is like this:
Class MainWindow is a JFrame object, on which there is a JButton object (named button1). When I hit that button, the second window (this window is a JFrame object that is instance of class SecondWindow) will appear with a JTextField object (named textField) inside and a JButton (named button2) object lying underneath. I enter the string “hello” on that textField and hit button2, some variable (that is declared like this boolean isConfirmed = false), that is created inside SecondWindow class is set to be true. Otherwise isConfirmed is set to be false (just by default). From class MainWindow (the object of this class is still running), I must retrieve that value of isConfirmed, so that I can do some stuff according to that value (like show a message confirming that you’ve typed “hello” or not).
And this is my attempt to do the thing:
First is the MainWindow.java
Code :
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.FlowLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MainWindow extends JFrame {
private JPanel contentPane;
private final JButton button1 = new JButton("Hit me");
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainWindow mainFrame = new MainWindow();
mainFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MainWindow() {
setTitle("Main Window");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 293, 90);
setResizable(false);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
contentPane.add(button1);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
boolean test = false;
SecondWindow secondFrame = new SecondWindow();
while(true)
{
test = secondFrame.getValueOfisConfirmed();
if(test)
break;
}
//do something here for example
JOptionPane.showMessageDialog(null, "You've typed correctly", "Confirm information", 1);
}
});
}
}
and here is SecondWindow.java
Code :
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import java.awt.FlowLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class SecondWindow extends JFrame {
private JPanel contentPane;
private JTextField textField;
private final JButton button2 = new JButton("OK");
private boolean isConfirmed = false;
public SecondWindow() {
setTitle("Second Window");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(200, 200, 280, 90);
setResizable(false);
setVisible(true);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
textField = new JTextField();
contentPane.add(textField);
textField.setColumns(15);
contentPane.add(button2);
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String textString = textField.getText();
//if the entered string equals "hello" then is confirmed is set to be true
if( textString.equals("hello"))
{
isConfirmed = true;
};
}
});
}
public boolean getValueOfisConfirmed()
{
return isConfirmed;
}
}
And I didn't get what I expected. Afer hitting the Hit me button, the second window appeared but with some error.
I think the point is that the MainWindow object is always running, it doesn’t wait for me to type anything on JTextField on SecondWindow object.
Is there anyway to force MainWindow object to stop and wait until user type some text on JTextField on the second window?
Any help or suggestion would be appreciated!
Re: Problem retreving data from another JFrame in Java
Paste the full exception trace here.
Re: Problem retreving data from another JFrame in Java
Quote:
Originally Posted by
phabion
I think the point is that the MainWindow object is always running, it doesn’t wait for me to type anything on JTextField on SecondWindow object.
Is there anyway to force MainWindow object to stop and wait until user type some text on JTextField on the second window?
Any help or suggestion would be appreciated!
You can solve the problem by using some sort of waiting method for the SecondWindow. When the MainWindow opens the SecondWindow, it also calls the waiting method of the SecondWindow. The waiting method will stop when a button is clicked on the SecondWindow, and control is returned to the MainWindow.
For waiting, use Thread.sleep() and a boolean flag indicates waiting status. Turn this flat on/off appropriately.
Re: Problem retreving data from another JFrame in Java
You might also want to research the observer design pattern.