Java tutorial
/* * Copyright 2009 Tonny Kohar. * Copyright 2012 Paul Merlin. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. * * See the License for the specific language governing permissions and * limitations under the License. */ package org.qi4j.envisage; import com.jgoodies.looks.LookUtils; import com.jgoodies.looks.Options; import com.jgoodies.looks.plastic.PlasticLookAndFeel; import com.jgoodies.looks.plastic.theme.ExperienceBlue; import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.LookAndFeel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import org.qi4j.api.structure.ApplicationDescriptor; /** * Qi4J Application Viewer */ public class Envisage { protected ApplicationDescriptor application; private EnvisageFrame mainFrame; public void run(ApplicationDescriptor application) { initLookAndFeel(); this.application = application; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { showMainFrame(); } }); } public void stop() { if (mainFrame != null && mainFrame.isDisplayable()) { mainFrame.dispose(); mainFrame = null; } } private void showMainFrame() { mainFrame = new EnvisageFrame(application); mainFrame.setLocationByPlatform(true); mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); mainFrame.setSize(new Dimension(1024, 768)); mainFrame.setVisible(true); mainFrame.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent evt) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { mainFrame.initQi4J(); } }); } }); } private void initLookAndFeel() { String osName = System.getProperty("os.name").toUpperCase(); // set to use swing anti alias text only for JVM <= 1.5 System.setProperty("swing.aatext", "true"); // set default swing bold to false, only for JVM 1.5 or above UIManager.put("swing.boldMetal", Boolean.FALSE); // set LaF LookAndFeel lnf = UIManager.getLookAndFeel(); if (lnf != null && lnf.getID().equalsIgnoreCase("Metal")) { final String lnfClassName; if (osName.startsWith("MAC")) { System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Envisage"); //TODO i18n System.setProperty("apple.laf.useScreenMenuBar", "true"); lnfClassName = UIManager.getSystemLookAndFeelClassName(); } else if (osName.startsWith("WINDOWS")) { UIManager.put("ClassLoader", LookUtils.class.getClassLoader()); lnfClassName = Options.getSystemLookAndFeelClassName(); Options.setUseNarrowButtons(false); } else { UIManager.put("ClassLoader", LookUtils.class.getClassLoader()); lnfClassName = Options.getCrossPlatformLookAndFeelClassName(); PlasticLookAndFeel.setTabStyle(PlasticLookAndFeel.TAB_STYLE_METAL_VALUE); PlasticLookAndFeel.setPlasticTheme(new ExperienceBlue()); Options.setUseNarrowButtons(false); //PlasticLookAndFeel.setMyCurrentTheme(new ExperienceBlueDefaultFont()); // for CJK Font } if (lnfClassName != null) { try { UIManager.setLookAndFeel(lnfClassName); } catch (Exception ex) { System.err.println("Unable to set LookAndFeel, use default LookAndFeel.\n" + ex.getMessage()); } } } } }