I'm also trying to find out how to catch the Window Close event so that I
can save my settings to a file.
I can't find an events menu option that refers to it.
The code that usually comes up for a GUI is something like:
-------------------
public class DesktopApplication1View extends FrameView {
public DesktopApplication1View(SingleFrameApplication app) {
super(app);
initComponents();
//status bar code etc. (don't use this)
}
//about box code here - something else I don't use
//along with all the other gui generated code.
}
-------------------
Then you've got the code that actually calls the applicationview:
-------------------
package desktopapplication1;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;
/**
* The main class of the application.
*/
public class DesktopApplication1 extends SingleFrameApplication {
/**
* At startup create and show the main frame of the application.
*/
@Override protected void startup() {
show(new DesktopApplication1View(this));
}
/**
* This method is to initialize the specified window by injecting
resources.
* Windows shown in our application come fully initialized from the GUI
* builder, so this additional configuration is not needed.
*/
@Override protected void configureWindow(java.awt.Window root) {
}
/**
* A convenient static getter for the application instance.
* @return the instance of DesktopApplication1
*/
public static DesktopApplication1 getApplication() {
return Application.getInstance(DesktopApplication1.class);
}
/**
* Main method launching the application.
*/
public static void main(String[] args) {
launch(DesktopApplication1.class, args);
}
}
-----------------
Obviously my application has all of the code it needs and is working,
except for the irritating fact that the window is resizable (and needs to
act more like a dialog or tool, rather than an editor window!) and I'm
unable to catch the close event so that I can save my data.
Any help would be appreciated!
Perhaps you should try hunting the JavaDocs instead..
> ...refers to the resizable property, ...
..for a set method on that attribute.
--
Andrew Thompson
http://pscode.org/
> On Aug 6, 11:10 pm, "Rexx Magnus" <trash...@uk2.net> wrote:
>> I've been hunting on google rather fruitlessly, ...
>
> Perhaps you should try hunting the JavaDocs instead..
>
I looked there first, but don't know how to implement it, given that most
(all in my case) of the GUI creation code is guarded.
>> ...refers to the resizable property, ...
>
> ..for a set method on that attribute.
>
Yes, I know there's a setResizable method for JFrames, but in the context
of the code that the GUI designer creates, I don't know what to apply it
to, which is why I'm stuck.
>
> I've been hunting on google rather fruitlessly, trying to find out how
> to make a window non-resizable after creating a desktop application in
> Netbeans 6.1. The properties dialog for the frame don't have one that
> refers to the resizable property, so that's no use. I'm not sure how or
> where to put code to set it to non-resizable (if it's possible)
>
> I'm also trying to find out how to catch the Window Close event so that
> I can save my settings to a file.
> I can't find an events menu option that refers to it.
>
> The code that usually comes up for a GUI is something like:
> -------------------
> public class DesktopApplication1View extends FrameView {
>
> public DesktopApplication1View(SingleFrameApplication app) {
> super(app);
>
> initComponents();
>
Right, managed to sort this out:
this.getFrame().setResizable(false);
this.getFrame().setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.getFrame().addWindowListener(new Closer());
In just after the initComponents(); line and added my Closer() routine
elsewhere. One problem remains now though, when you close the window via
the close button, this works - except if you're on a Mac and exit via the
Quit menu (system menu, not one in the frame) it bypasses the routine.
> Right, managed to sort this out:
> this.getFrame().setResizable(false);
> this.getFrame().setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
> this.getFrame().addWindowListener(new Closer());
>
>
> In just after the initComponents(); line and added my Closer() routine
> elsewhere. One problem remains now though, when you close the window via
> the close button, this works - except if you're on a Mac and exit via
> the Quit menu (system menu, not one in the frame) it bypasses the
> routine.
I've tried adding:
app.addExitListener(new myExit());
Just after it, to see if I can get an ExitListener to catch it, using the
following based on an example in the javadocs:
class myExit implements Application.ExitListener {
public boolean canExit(EventObject e) {
Object source = (e != null) ? e.getSource() : null;
System.out.println("Canexit");
Component owner = (source instanceof Component) ?
(Component)source : null;
int option = JOptionPane.showConfirmDialog(owner, "Really Exit?");
return option == JOptionPane.YES_OPTION;
}
public void willExit(EventObject e) {
System.out.println("Willexit");
}
}
However, it's not working as far as I can tell. I did try putting it into
the other class directly as an override to the shutdown() method of the
application, but couldn't get that to work either.
Preferences get flushed automatically, but you should be able to hook
into the application menu's Quit functionality, as described here:
<http://developer.apple.com/samplecode/OSXAdapter/index.html>
You can determine if you're on Mac OS X at run-time:
<http://developer.apple.com/technotes/tn2002/tn2110.html>
Here's some recent guidelines:
<http://developer.apple.com/referencelibrary/Java/idxDesignGuidelines-dat
e.html>
--
John B. Matthews
trashgod at gmail dot com
home dot woh dot rr dot com slash jbmatthews
> Preferences get flushed automatically, but you should be able to hook
> into the application menu's Quit functionality, as described here:
>
> <http://developer.apple.com/samplecode/OSXAdapter/index.html>
>
> You can determine if you're on Mac OS X at run-time:
>
> <http://developer.apple.com/technotes/tn2002/tn2110.html>
>
> Here's some recent guidelines:
>
> <http://developer.apple.com/referencelibrary/Java/idxDesignGuidelines-dat
> e.html>
>
Thanks, I remembered something about that the last time I tried to write
something explicitly in Java, rather than using Cocoa. The current project
I wrote in Java using XCode 2, and used a Cocoa interface. Of course, that
made it totally platform dependent, which wasn't what I wanted to achieve.
I'd since converted the entire project to Swing in Netbeans, and was
hoping for something that didn't require OS detection, hence (in my other
post) trying to handle the application's exitlistener, albeit rather
unsuccessfully.
> Right, managed to sort this out:
> this.getFrame().setResizable(false);
> this.getFrame().setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
> this.getFrame().addWindowListener(new Closer());
>
>
> In just after the initComponents(); line and added my Closer() routine
> elsewhere. One problem remains now though, when you close the window
> via the close button, this works - except if you're on a Mac and exit
> via the Quit menu (system menu, not one in the frame) it bypasses the
> routine.
To handle those events, I think you will need to use some Mac-specific
coding. Apple has some examples which show how to handle that in a way
that works (and compiles) even on non-Mac systems that don't use the Mac
specific application adapters. It relies on using the reflection
mechanism to find the Mac-specific code.
Look at the OSXAdapter sample code:
<http://developer.apple.com/samplecode/OSXAdapter/index.html>
And for some more Mac-related background:
<http://developer.apple.com/referencelibrary/API_Fundamentals/Java-fund-date.html>
<http://developer.apple.com/samplecode/Java/index.html>
--
Thomas A. Russ, USC/Information Sciences Institute