Copyright Derek O'Reilly, Dundalk Institute of Technology (DkIT), Dundalk, Co. Louth, Ireland.
LookAndFeel Example: (Run Applet)
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class LookAndFeelDemo extends JApplet
{
@Override
public void init()
{
this.setContentPane(new View());
}
public class View extends JPanel implements ListSelectionListener
{
private final JList lookAndFeelList;
private final UIManager.LookAndFeelInfo[] lookAndFeelInfo;
public View()
{
super();
// Generate a JList containing the names of all of the Look and Feels that
// are installed on this computer
this.lookAndFeelInfo = UIManager.getInstalledLookAndFeels();
final String installedLookAndFeelNames[] = new String[this.lookAndFeelInfo.length];
for (int i = 0; i < this.lookAndFeelInfo.length; i++)
{
installedLookAndFeelNames[i] = (this.lookAndFeelInfo[i].getName());
}
this.lookAndFeelList = new JList(installedLookAndFeelNames);
this.lookAndFeelList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Place some components on the screen to show effects of different Look and Feel
final JButton button = new JButton("A Button");
final JColorChooser colorChooser = new JColorChooser();
final JCheckBox checkBox = new JCheckBox("A Check Box");
// Components Panel layout
final JPanel componentsPanel = new JPanel();
componentsPanel.setLayout(new FlowLayout());
componentsPanel.add(checkBox);
componentsPanel.add(button);
componentsPanel.add(colorChooser);
// Applet Panel layout
this.setLayout(new BorderLayout());
this.add("North", this.lookAndFeelList);
this.add("Center", componentsPanel); // just to show what the Look and Feel is like
// Listners
this.lookAndFeelList.addListSelectionListener(this);
}
@Override
public void valueChanged(ListSelectionEvent e)
{
if (!e.getValueIsAdjusting())
{
final int i = this.lookAndFeelList.getSelectedIndex();
try
{
UIManager.setLookAndFeel(this.lookAndFeelInfo[i].getClassName());
// refresh all components to display with new Look and Feel
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception ex)
{
System.err.println("Error" + ex.getMessage());
}
}
}
}
}
Look and Feels .jar class files can be downloaded. Downloaded Look and Feel .jar files must be copied into a project's class path (for example, "c:Program Files/java/jre6/lib/ext". Note that it might be on a different drive and/or folder). If you copy a look-and-feel jar file into the project's class path it will available for use in your applets and applications. This approach is restrictive, as it requires that users install a .jar file on their device.
A look-and-feel .jar file can be embedded into an application by including the look-and-feel .jar file in the applet's library path. In NetBeans, this is done by:
Select the Project's Project Properties window (right click on the project name)
Select the "Libraries" option in the Project Properties window.
Press the "Add Jar/Folder" button.
Add the look-and-feel .jar file.
Netbeans will create a "dist/lib" folder to hold your look-and-feel.
When you build your application, NetBeans will generate a distributable application that consists of two separate files: your application .jar file and the embedded library .jar file. Ideally, you would prefer to have a stand alone application that consists of only one .jar file.
The .jar file "napkinlaf-alpha001.jar" is embedded in the example below. In order to run the application, you need to extract the distribution files from the downloaded .zip file.
LookAndFeel_Embedded_Application_Demo Example: (Run Application)
package lookandfeel_embedded_application_demo;
import java.awt.*;
import javax.swing.*;
import napkin.NapkinLookAndFeel.*;
public class LookAndFeel_Embedded_Application_Demo extends JApplet
{
public static void main(String[] args)
{
// application title and dimensions
final String title = "Embedded Look-and-Feel Demo";
final Dimension applicationFrameSize = new Dimension(800, 600);
// make an application frame to hold the applet
final JFrame applicationFrame = new JFrame(title);
applicationFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
applicationFrame.setSize(applicationFrameSize);
// place the applet inside the application's frame
final JApplet applet = new LookAndFeel_Embedded_Application_Demo();
applicationFrame.setLayout(new BorderLayout());
applicationFrame.getContentPane().add("Center", applet);
applet.init();
applicationFrame.setVisible(true);
}
@Override
public void init()
{
this.setContentPane(new View());
}
public class View extends JPanel
{
public View()
{
super();
// Place some components on the screen to show effects of different Look and Feel
final JButton button = new JButton("A Button");
final JColorChooser colorChooser = new JColorChooser();
final JCheckBox checkBox = new JCheckBox("A Check Box");
// Components Panel layout
final JPanel componentsPanel = new JPanel();
componentsPanel.setLayout(new FlowLayout());
componentsPanel.add(checkBox);
componentsPanel.add(button);
componentsPanel.add(colorChooser);
// Applet Panel layout
this.setLayout(new GridLayout(1, 1));
this.add(componentsPanel); // just to show what the Look and Feel is like
try
{
UIManager.setLookAndFeel("napkin.NapkinLookAndFeel");
// refresh all components to display with new Look and Feel
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception ex)
{
System.err.println("Error: " + ex.getMessage());
}
}
}
}
To embed a library in your .jar file so that your application is fully contained in one .jar file, you need to place the following code in your project's build.xml file. This code should be placed immediately before the last line of the build.xml file (the last line contains the tag </project>).
<target name="package-for-store" depends="jar">
<!-- Change the value of this property to be the name of your JAR,
minus the .jar extension. It should not have spaces.
<property name="store.jar.name" value="MyJarName"/>
-->
<property name="store.jar.name" value="LookAndFeel_Embedded_Application_Demo"/>
<!-- don't edit below this line -->
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
To build a stand alone application in NetBeans:
right click on the build.xml file
hover the mouse over the "run target" item
from the sub-menu, hover the mouse over the "other targets" item
from the sub-menu, left click the "package-for-store" item

This will result in the "/store" folder containing a single, stand alone .jar application file.
Stand Alone LookAndFeel_Embedded_Application_Demo Example: (Run Application)
The java source code is exactly the same as the LookAndFeel_Embedded_Application_Demo above, so it does not need to be repeated here.
A look-and-feel .jar file can be embedded into an applet by including the look-and-feel .jar file in the archive attribute of the HTML's <applet> tag.
<APPLET archive = "napkinlaf-alpha001.jar" code = "Lookandfeel_Embedded_Applet_Demo.class" width=800 height=600></APPLET>
The .jar file "napkinlaf-alpha001.jar" is embedded in the example below.
LookAndFeel_Embedded_Applet_Demo Example: (Run Applet)
import java.awt.*;
import javax.swing.*;
public class LookAndFeel_Embedded_Applet_Demo extends JApplet
{
@Override
public void init()
{
this.setContentPane(new View());
}
public class View extends JPanel
{
public View()
{
super();
// Place some components on the screen to show effects of different Look and Feel
final JButton button = new JButton("A Button");
final JColorChooser colorChooser = new JColorChooser();
final JCheckBox checkBox = new JCheckBox("A Check Box");
// Components Panel layout
final JPanel componentsPanel = new JPanel();
componentsPanel.setLayout(new FlowLayout());
componentsPanel.add(checkBox);
componentsPanel.add(button);
componentsPanel.add(colorChooser);
// Applet Panel layout
this.setLayout(new GridLayout(1, 1));
this.add(componentsPanel); // just to show what the Look and Feel is like
try
{
UIManager.setLookAndFeel("napkin.NapkinLookAndFeel");
// refresh all components to display with new Look and Feel
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception ex)
{
System.err.println("Error: " + ex.getMessage());
}
}
}
}
Each applet can only have one look-and-feel. However, any JFrames or JDialogs that are opened from the applet can have their own Look-And-Feel.
LookAndFeel_Multiple_Demo Example: (Run Applet)
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class LookAndFeel_Multiple_Demo extends JApplet
{
@Override
public void init()
{
this.setContentPane(new View());
}
public class View extends JPanel implements ListSelectionListener
{
private final UIManager.LookAndFeelInfo[] lookAndFeelInfo;
private JList lookAndFeelList;
public View()
{
super();
// Generate a JList containing the names of all of the Look and Feels that
// are installed on this computer
this.lookAndFeelInfo = UIManager.getInstalledLookAndFeels();
final String installedLookAndFeelNames[] = new String[this.lookAndFeelInfo.length];
for (int i = 0; i < this.lookAndFeelInfo.length; i++)
{
installedLookAndFeelNames[i] = (this.lookAndFeelInfo[i].getName());
}
this.lookAndFeelList = new JList(installedLookAndFeelNames);
this.lookAndFeelList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Applet's Panel
this.add(this.lookAndFeelList);
// Listners
this.lookAndFeelList.addListSelectionListener(this);
}
@Override
public void valueChanged(ListSelectionEvent e)
{
if (!e.getValueIsAdjusting())
{
final int i = this.lookAndFeelList.getSelectedIndex();
final ComponentFrame componentFrame = new ComponentFrame("A frame", this.lookAndFeelInfo[i].getClassName());
componentFrame.setVisible(true);
}
}
}
class ComponentFrame extends JFrame
{
// A frame that is holding some components
// so as to show that each frame can have a different Look and Feel
public ComponentFrame(String title, String LookAndFeelClassName)
{
super(title);
this.setSize(800, 800);
try
{
UIManager.setLookAndFeel(LookAndFeelClassName);
// refresh all components to display with new Look and Feel
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception e)
{
System.err.println("Error" + e.getMessage());
}
// Place some components on the screen to show effects of different Look and Feel
final JButton button = new JButton("A Button");
final JColorChooser colorChooser = new JColorChooser();
final JCheckBox checkBox = new JCheckBox("A Check Box");
// Components Panel layout
this.setLayout(new FlowLayout());
this.add(checkBox);
this.add(button);
this.add(colorChooser);
}
}
}
Copyright Derek O' Reilly, Dundalk Institute of Technology (DkIT), Dundalk, Co. Louth, Ireland.