I have designed two JFrames in NetBeans.
When I click the "rules" button (i.e placed on JFrame1) then it opens a second JFrame (but JFrame2 opens over JFrame1's window, that's what I dont want).
In the second JFrame there is a "close" button. But when I click this button, I want JFrame1 to be opened and it is working too, but JFrame2 is actually not closed and JFrame1 is appearing over JFrame2.
In short the main form is JFrame1. When I click the "rules" button from JFrame1 it opens JFrame2 over JFrame1, and in JFrame2 there is a "close" button when it gets clicked the main form (i.e JFrame1) is lauched but it is launched over JFrame2.
The scenerio is JFframe1 -> JFrame2 -> JFrame1
Now my question is after clicking the "rules" button, JFrame1 should be closed and JFrame2 displayed on the screen and vice versa.
Assuming your button has an actionListener, after clicking the "rules button" put in:
JFrame1.dispose(); //Remove JFrame 1
JFrame2.setVisible(true) //Show other frame
And then reverese them for the opposite reaction
Somethig like this should be on the constructor or method which create JFrame2:
btnCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//call another method in the same class which will close this Jframe
CloseFrame();
}
});
It's method which should close JFrame2
public void CloseFrame(){
super.dispose();
}
Well, if you already have a actionListener, you should add this:
JFrame1.dispose(); // This will close the frame
The JFrame1 is the name of your frame.
And if you want to open another frame that you have, add this:
JFrame2.setVisible(true); // This will put the other frame visible
I'm not an expert by any means, however, I ran into this problem as well. If you set your second JFrame to hidden, when you hit "Cancel", it will close the second JFrame.
//this is the code for the "cancel" button action listener
public void actionPerformed(ActionEvent e) {
setVisible(false);//hides the second JFrame and returns to the primary
this worked for me (Frame1 Called RegScreen and Frame2 Called MainScreen):
RegScreen.this.setVisible(false);
new MainScreen().setVisible(true);
Hope that this helps :) Regscreen was the original frame open at startup.
If this doesn't work, try this
JFrame1.dispose(); //Remove JFrame 1
JFrame2.setVisible(true) //Show other frame
JFrame2.setVisible(true);
this.dispose();
Have a MainClass with a main() method.
Have the MainClass that has the main() method encapsulate your JFrame1 and JFrame2 reference variables. Don't have JFrame1 or JFrame2 contain main() unless you have a specific reason.
After something is clicked in one of the JFrame objects, instantiate/make visible the other JFrame object and dispose of itself via your MainProgram.JFrame object methods.
Example:
//btn event inside 1st JFrame/window
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
MainProgram.openResultsForm(); //MainProgram opens 2nd window
MainProgram.queryEntryForm.dispose(); //MainProgam closes this,
//the 1st window
}
Related
Hy. I have problem when my first jframe button was set disable the frame then log on to another jframe.
Jframe1 , my code:
Private void.jbutton1actionperformed(java.awt.event.ActionEvent evt){
this.setEnabled(false);
new Jframe2().show();
}
I'm not make Jframe1 dispose, only disabled, and make Jframe2 showing. In Jframe2 I set button here:
Private void jbutton1actionperformed(java.awt.event.ActionEvent evt){
this.dispose()
new Jframe1().setEnabled(true);
}
Then my problem is, Jframe1 was still disabled. I dont know how to make enable from another jframe. Please help me!
When you use new that means you are creating a new jFrame1, not updating the old one.
Basically I'm making a music player in Java using Eclipse, and I have a JButton on the main GUI called "add song" - the user clicks this and another JFrame appears, allowing the user to click "browse" and select an mp3 file from the computer. I then store the data as a musicFile object I created, and I want to send this information back to the main function. My code for the "add song" action listener is the following:
private ActionListener song(final JButton button)
{
return new ActionListener(){
public void actionPerformed(ActionEvent event)
{
addSongGUI addSong = new addSongGUI(); //the JFrame that opens
//once the user presses the "add song" button
listOfSongs.add(addSong.musicFile); //the addSongGUI has a musicFile variable that I want to read and get information from
String songName = addSong.musicFile.getSongName();
//... and do more stuff
}
};
}
When this runs, "String songName = addSong.musicFile.getSongName();" gives me a null pointer exception, because it tries to read the musicFile from the addSongGUI right away, before the user can pick a song to set the musicFile. So, how can I wait until the user picks a song, closes the window, and then have this line of code read (what can I do to get rid of this null pointer exception)? Thanks.
As noted, the correct and easy solution is not to display a JFrame when you want a modal dialog -- use a modal JDialog instead:
private ActionListener song(final JButton button) {
return new ActionListener(){
public void actionPerformed(ActionEvent event) {
// AddSongDialog is a modal JDialog
AddSongDialog addSong = new AddSongDialog(mainJFrame);
addSong.setVisible(true); // show it -- this pauses flow of code here
String songName = addSong.musicFile.getSongName();
//... and do more stuff
}
};
}
Again, addSongDialog is a modal JDialog, which is why you would need to pass in the application's main JFrame into it, since the JFrame (or parent JDialog) will be needed when calling the JDailog's super constructor in your constructor.
An alternative and far weaker solution is to use a JFrame and add a WindowListener to it, but why do that when the JDialog solution works so easily and simply?
I have a JFrame class and it was made in the design section on Netbeans. I am trying to make a log in button that takes closes the current frame and opens another, is there anyway I can do that?
I have tried:
JFrame frame = new JFrame();
But I want it to be editable in the design section!
Double Click the Login Button in the NETBEANS or add the Event Listener on Click Event (ActionListener)
btnLogin.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
this.setVisible(false);
new FrmMain().setVisible(true); // Main Form to show after the Login Form..
}
});
new SecondForm().setVisible(true);
You can either use setVisible(false) or dispose() method to disappear current form.
This link works with me: video
The answer posted before didn't work for me until the second click
So what I did is Directly call:
new NewForm().setVisible(true);
this.dispose();//to close the current jframe
JFrame.setVisible(true);
You can either use setVisible(false) or dispose() method to disappear current form.
I have a designed a control-frame on 1 class which has jbutton components, I have coded like on action event of these components diff-diff frame get initialized.
For each frame there is a class. now when I press second jbutton from control-frame then have to close the frame (which has opened when I pressed first jbutton from control-frame).
Just keep track of frame instance as instance variable in main class. Then close that instance on clicking close button.
public void open(ActionEvent e) {
frame = new something.. // your frame
}
public void close(ActionEvent e) {
frame.dispose();
}
Note:
JFrame frame is global variable.
write this in your button click linstener
yourFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
I am building an application in java that has 2 JFrames. 1st frame has a button that upon clicking should open the next JFrame while the previous one should close. I know how to display the next frame but:
How do I close the previous JFrame automatically when the next JFrame opens ?
I tried thie following code:
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
new GUI();//next frame
this.dispose();//compile-time-error
}
Where you call this.dispose(), the object referred by this is an instance of ActionListener. To invoke the instance of GUI type GUI.this.dispose() instead.