GUIFramework (GFW) is the basic module for developing Swing GUIs at SLAC.
Current version
0-0-2
Requirements TO-DO
Developer's Guide
Abstract
This guide describes in detail how to use GFW in a Swing application. In general, you create your own Swing components (either programmatically, or with a GUI builder) and add them to the appropriate GFW frame.
Overview
We recommend the following steps:
- #Check out GFW from CVS into Eclipse.
- #Read and run the example code.
- #Create custom components for the desired GFW frame
- #Write code that adds custom components to GFW.
- #Add event listeners to the appropriate widgets.
- #Test the application.
- #Optional features.
Check out GFW from CVS into Eclipse
GFW is located in $CVSROOT/physics/GUIFramework
Read and run the example code
An example can be found in the class
edu.stanford.slac.gfw.example.GfwExample
When running the example, please observe
- the different GFW frames
- the various areas in which the custom components end up
- how the GUI behaves when it is resized
Create custom components for the desired GFW frame
For a quick development (e.g. GUI mock ups), we recommend the Netbeans GUI Builder.
Write code that adds custom components to GFW
- Instantiate the custom components.
- Create an appropriate GFW frame, e.g.
final BasicFrame myFrame = new BasicFrame("My Frame"); //'final', because it's used later in an anonymous class
- Add custom components to various areas of the GFW frame, such as
- Title Bar
myFrame.addToTitleBar(myComponent);
- Tab 1
myFrame.addTopTab1(myComponent);
- Tab 2
myFrame.addTopTab2(myComponent);
- New Tab
myFrame.addTopTab(myComponent, "My Label");
- Bottom ScrollPane
myFrame.addToBottomScrollPane(myComponent);
- Title Bar
- Display the GFW frame
SwingUtilities.invokeLater(new Runnable() { public void run() { myFrame.setVisible(true); } });
Add event listeners to the appropriate widgets
Below we describe the recommended way, but nothing prevents you from using any other technique.
- Extend BasicFrameListener by overriding the default behavior and/or adding your own methods, e.g.
public class MyFrameListener extends BasicFrameListener { @Override public void helpButtonPressed(ActionEvent e) { System.out.println("Help me!!!!"); } public void myComponentActivated(EventObject e){ System.out.println("My component activated"); } }
- Override registerAsDelegateForSwingListeners method of the BasicFrameController class, e.g.
public class MyFrameController extends BasicFrameController { protected void registerAsDelegateForSwingListeners( final MyFrameListener myFrameListener) { super.registerAsDelegateForSwingListeners(myFrameListener); //don't forget this! Component myComponent = null; ... //get your own component myComponent.addComponentListener(new ComponentListener(){ public void componentActivated(EventObject e){ myFrameListener.myComponentActivated(e); } }); } public MyFrameController(BasicFrame myFrame) { super(myFrame); } }
- Add your BasicFrameListener to your BasicFrameController
BasicFrameListener myFrameListener = new MyFrameListener(); BasicFrameController myFrameController = new MyFrameController(myFrame); myFrameController.addBasicFrameListener(myFrameListener);
Test the application
Optional features
- See also SwingUtil