Tips And FAQs

Installation
Opening files with Jigloo
Performance
Code Parsing
Coding Tips
Productivity Tips
Custom components
Miscellaneous
Problems


Installation

Why does Eclipse not recognize that Jigloo (or the latest version of Jigloo) is installed?

Eclipse 3 has problems with it's plugin cache and sometimes does not recognize that a plugin has been installed or upgraded. You can force Eclipse to re-load all the plugin definitions by either:
  1. deleting or moving the eclipse/configuration folder or
  2. starting eclipse by opening a command-line console in the eclipse folder and executing "eclipse -clean -vmargs -Xmx300m"

Opening files with Jigloo

I have a Java class written with a different IDE/GUI builder - how can I open it with Jigloo?

Locate your class in Eclipse's Package Explorer view, then right-click on it and choose "Open with->Form Editor". Jigloo should open the class.



I created a java class with Jigloo, but now when I open it it opens just like a regular java class in the java editor - how can I open it with Jigloo?

Sometimes Eclipse does not remember which editor it used previously to open a file, so you need to make sure that your class is not opened in any editor in eclipse, then right-click on the file and choose "Open with->Form Editor".

Performance

Why does eclipse go really slowly with Jigloo open?

By default, Eclipse does not start with a large allocation of memory, and using Jigloo inside Eclipse to open a large file can require 20-100MB of memory, so it is a good idea to allow Eclipse to use about 200-400MB. One way to do this is to start Eclipse using a script or batch file in the eclipse folder which executes the command:

java -Xmx300m -cp startup.jar org.eclipse.core.launcher.Main

or alternatively executing the eclipse executable with these arguments:

eclipse -vmargs -Xmx300m


Code Parsing



W
hich methods will Jigloo parse in my code?

Jigloo starts by parsing the constructors of your class. If it finds a call to other class methods (eg, if "createComponents" is a method of your class, and it is called from your constructor), then those methods will be parsed by jigloo as it encounters the method calls. Similarly, if those methods call other methods then those methods will be parsed and so on. If, in the course of parsing the constructors and all the methods called by the constructors etc, one of the "GUI initialization" methods is parsed, then jigloo will stop parsing your code.

The "GUI initialization" methods are by default {initGUI, initComponents, initialize, open, createPartControl, createContents, createControl and createDialogArea} but this list can be changed in the Jigloo Preferences Page.


If, however, none of the "GUI initialization" methods have been parsed then Jigloo will search the code for one of these methods (in the order in which they appear in the list) and will parse the first one it finds. Eg, if a class has methods "open" and "initialize", then "initialize" will be parsed because it appears first in the
"GUI initialization" list. If none of the "GUI initialization" methods appear in a class, then every method in the class will be parsed.

Therefore if you always use a method "initializeGUI", say, to create your code then you would add "initializeGUI" to the start of the
"GUI initialization" list.

Which classes will Jigloo instantiate as it parses my code?
As jigloo tries to render your GUI in it's Form Editor, it needs to instantiate the visual classes used and also any classes which are used as properties of these visual classes. Also, if a method is called on a visual class then Jigloo will try and instantiate the classes passed as parameters for this method. However, Jigloo will not instantiate any other classes. If you find that Jigloo is instantiating a class that you do not want it to instantiate, add this class to the "Forbidden superclasses" list in the "Class creation" tab of the Jigloo Preferences Page.

Hiding code from Jigloo.
Surround a block of code with a //$hide>>$ and a //$hide<<$ comment and Jigloo will not parse that block. Useful for designing a GUI which only appears if a condition is true or false - hide the part of the conditional block which you don't want to design with Jigloo just yet. Or for making sure that Jigloo doesn't try and instantiate classes that you don't want to be instantiated (perhaps if they try and make a DB connection or write to a file when instantiated).
Coding tips

Use Jigloo's visual inheritance. 
Instead of designing a lot of separate but similar visual classes, design a base class with publically-accessible buttons, panels etc, and use Jigloo to build extensions of this class. The "Flowershop" examples which Jigloo can create for you demonstrate visual inheritance.

Re-formatting the source code
Jigloo allows you to define how you want GUI elements to be coded - either using getter methods for Swing elements (as produced by JBuilder, the Eclipse VE project, etc) or as blocks separated by braces, tagged comments or blank lines. Elements created by Jigloo will be added to the code using the defined style, but to re-format the entire source using the current style, right-click anywhere in the Form Editor and choose "Source->Reformat code to current coding style".  For more details, refer to this section.


Productivity tips

Here are some tips, mainly involving key strokes, which will increase your productivity.

Stopping & starting code parsing.
Since Jigloo will automatically parse any changes you make to your code, after a given delay, if you are making a lot of code changes, you will save time by turning parsing off, and on again when you have finished. Just hit Ctrl+Alt+P in the source editor to toggle code parsing on and off.
Multi-selecting elements (by CTRL and selection marquee).
You can hold CTRL down when selecting elements in the form editor and this will multi-select the elements.

In addition, you can hold SHIFT down while dragging the mouse and a red rectangle (a selection marquee) will appear which you can drag around all the elements you wish to select (see figures). Note that to select an element you only need to intersect it with the marquee. Then any properties you change, or any resizing or moving or copy/cut/pasting you do will apply to all selected elements.
Select a component in the Outline by holding Alt down while clicking in the source editor.
Normally, clicking or moving the cursor over a piece of code (eg a property setter) selects the relevant component in the form editor, but shows the java outline in the Outline view - holding Alt down while clicking on the mouse shows the component tree in the Outline view instead. This may not work on Linux systems where Alt may have a pre-defined function.
Moving elements
Depending on the layout used by a container, components can be rearranged inside a container by dragging with the mouse.
Copying & pasting elements
You can hold CTRL down when dragging one or more elements in the form editor and this will paste copies of the elements.
Changing preferred sizes in GridBag and Form Layouts
When using a GridBag or JGoodies Form layout, normally resizing a component will change it's gridx/y/width/height values. However, by holding SHIFT down when resizing an element you will change the preferredSize property of an element, rather than it's gridx/y/width/height values.
Changing an element's text property quickly.
Double-click on a button, label, group, etc in the Form Editor and a text field will appear, allowing you to edit it's text. This applies to any component which has a "text" property.

Custom components

How can I give my custom component an icon that will show up in Jigloo's "Custom" palette, instead of the default java-bean icon?

You need to create a BeanInfo class for your custom class, and define the getIcon method. For an example of how to do this, look at the Swing FlowerShop
example which you can create by hitting CTRL+N, then in the "New" wizard, select "GUI Forms->Examples->Swing Inheritance/JavaBean (FlowerShop) example".



Why doesn't my BeanInfo icon show up in Jigloo?

Eclipse 3.0+ sets a ContentHandlerFactory for URLConnections which doesn't seem capable of handling gif images, and so the url.getContent() method in the SimpleBeanInfo loadImage method does *not* return an ImageProducer, and hence the method does not return an image. The method below, however, does work in Eclipse 3.0+ because it does not depend on the url.getContent(), so to see your icon in Jigloo, simply add this method to your BeanInfo, which will over-ride SimpleBeanInfo's loadImage method.


    public Image loadImage(String imgUrl) {
        try {
            super.loadImage(imgUrl);
            URL url = getClass().getClassLoader().getResource(imgUrl);
            if(url != null)
                return new ImageIcon(url).getImage();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


Miscellaneous
Maximize the main editor by double-clicking on it's name tag.
Fills Eclipse with the parts of Jigloo essential for designing forms.
How to move a component that is behind another component.
Say you have a JPanel inside a JScrollPane and you want to move the JScrollPane - first select the JScrollPane in the Outline view, then click and drag a blue region of the selection border (which is made up of alternating black and blue regions.
Working with SWT classes not initially created by Jigloo
Many Java GUIs built by hand or by other GUI builders can be modified succesfully by Jigloo, but for SWT GUIs you might want to use some Jigloo tools to migrate the code to a more Jigloo-friendly form:
  • Migrate to using the SWTResourceManager to manage fonts, colors and images - do this by right-clicking anywhere on the Form Editor and choosing "Source->Convert to using SWTResourceManager"
  • Insert a new showGUI method which will display the SWT Composite inside a Shell, using the size of the Composite (if it is defined) to set the size of the Shell.
For more details, read this.

Problems

Why can't I change the location/size of my GUI elements?
This is probably because of the layout manager you are using. For example, if you have a JPanel which uses a FlowLayout and you keep adding JButtons to it, then the JButtons will assume their most natural sizes - you will be able to change their sizes and re-order them but you will not be able to set their absolute position in the JPanel, since that is determined by the JPanel's layout manager. If you want to set the absolute position as well as size, then try using the Anchor or Absolute layouts (for Swing), or Form or Absolute layouts (for SWT).

But reading up a bit about the other layouts - the GridBag or JGoodies Form layouts for Swing, or the Grid layout for SWT can be particularly useful - will allow you to benefit from these layout managers.

Errors with properties or fields not being recognized
<>If say Java 1.5 is used to run Eclipse, then the properties of Swing components generated by Jigloo will be those for Java 1.5, but if you use a Java 1.4 JRE inside Eclipse to build and run programs then some properties added by the Java 1.5 version will cause a compile error. The same goes for the SWT library - if SWT version 3 is used to run Eclipse, but SWT 2 is used to run and build programs inside Eclipse then you might get compile errors. The solution is to use the same Java or SWT libraries to run Eclipse as to run programs inside Eclipse.
Problems on Linux
If you have problems on Linux/GTK (such as the "+" signs not expanding in the GUI Properties editor) then make sure you have version 2.1.1 of GTK and it's accompanying packages (pango, glib, atk) - a useful article, with download links is here:  http://developer.gnome.org/doc/API/2.4/gtk/gtk-building.html