You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 51 Next »

GUIFramework (GFW) is the basic module for developing Swing GUIs at SLAC.

Current Version

0-0-1

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:

  1. #Check out GFW from CVS into Eclipse.
  2. #Read and run the example code.
  3. #Create custom components for the desired GFW frame
  4. #Customize GFW.
  5. #Test the application.
  6. Optional features.
  7. #Tips.

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.

Customize GFW

  1. Instantiate the custom components.
  2. Create an appropriate GFW frame, e.g.
    final BasicFrame myFrame = new BasicFrame("My Frame"); //'final', because it's used later in an anonymous class
    
  3. 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);
      
  4. Set application version
    BasicFrame myFrame = ...;
    JLabel appVersionLabel = bf.getBasicPanel().getStatusPanel().getAppVersionLabel();
    appVersionLabel.setText("my version"); //run in the GUI thread, of before displaying the frame
    
  5. #Add event listeners to the appropriate widgets
  6. 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 topTabChanged(ChangeEvent e) {
    		System.out.println("Tab changed");
    	}
    	
    	public void myComponentActivated(EventObject e){
    		System.out.println("My component activated");
    	}
    }
    
  • Override registerAsDelegateForSwingListeners method of the BasicFrameController class (find out more about Swing listeners), e.g.
    public class MyFrameController extends BasicFrameController {
    	
    	protected void registerAsDelegateForSwingListeners(
    			final MyFrameListener myFrameListener) {
    		super.registerAsDelegateForSwingListeners(myFrameListener); //don't forget this!
    		Component myComponent = ...; //get your component, e.g. by using SwingUtil, or through methods of your GUI class
    
    		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);
    

Set web help URL

If you want to provide help via the default GFW way, set the URL of your help website.

BasicFrameListener myFrameListener = ...;
myFrameListener.setHelpUrl("http://www.google.com");

Test the application

Optional features

Info Text Pane

Located in the status panel, the info text pane can be used to display some info beyond messaging.

JTextPane infoTextPane = bf.getBasicPanel().getStatusPanel().getInfoTextPane();
infoTextPane.setText("my info"); //run in the GUI thread, of before displaying the frame

Progress Bar

Located in the status panel, the progress bar could be used to display the progress of your program.

  • Determinate
    JProgressBar progressBar = bf.getBasicPanel().getStatusPanel().getProgressBar();
    //run all methods below in the GUI thread, of before displaying the frame
    progressBar.setMinimum(0);
    progressBar.setMaximum(10);  
    progressBar.setValue(6); 
    
  • Indeterminate
    JProgressBar progressBar = bf.getBasicPanel().getStatusPanel().getProgressBar();
    progressBar.setIndeterminate(true);  //run in the GUI thread, of before displaying the frame
    
    To stop:
    progressBar.setValue(progressBar.getMinimum());
    progressBar.setIndeterminate(false);
    

SwingUtil

Tips

  • When adding to the GUI some long text that doesn't fit, update the frame, e.g.
    BasicFrame myFrame = ...;
    myFrame.update();
    
  • No labels