Java tutorial
/** =================================================================== * * @PROJECT.FULLNAME@ @VERSION@ License. * * Copyright (c) @YEAR@ L2FProd.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by L2FProd.com * (http://www.L2FProd.com/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "@PROJECT.FULLNAME@", "@PROJECT.SHORTNAME@" and "L2FProd.com" must not * be used to endorse or promote products derived from this software * without prior written permission. For written permission, please * contact info@L2FProd.com. * * 5. Products derived from this software may not be called "@PROJECT.SHORTNAME@" * nor may "@PROJECT.SHORTNAME@" appear in their names without prior written * permission of L2FProd.com. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL L2FPROD.COM OR ITS CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== */ package com.l2fprod.skinbuilder; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.Icon; import javax.swing.JSplitPane; import javax.swing.JToolBar; import javax.swing.UIManager; import com.jgoodies.looks.plastic.Plastic3DLookAndFeel; import com.jgoodies.uif_lite.component.Factory; import com.jgoodies.uif_lite.panel.SimpleInternalFrame; import com.l2fprod.common.application.Application; import com.l2fprod.common.application.core.AppContext; import com.l2fprod.common.application.core.DefaultAppContext; import com.l2fprod.common.swing.IconPool; import com.l2fprod.common.swing.LookAndFeelTweaks; import com.l2fprod.common.swing.UserPreferences; import com.l2fprod.skinbuilder.synth.SynthConfig; /** * Main. <br> * */ public class Main extends Application { /** * */ private static final long serialVersionUID = 1L; public Main() { setName("SynthBuilder"); setTitle("SynthBuilder EXPERIMENTAL WORK"); } @Override public void initialize(AppContext context) { super.initialize(context); buildUI(); } private void buildUI() { defaultUIInit(); SynthConfig config = new SynthConfig(); getContext().registerService(SynthConfig.class, config); // // COMPONENT TREE // TreePanel tree = new TreePanel(config.getComponentTreeModel()); tree.setPreferredSize(new Dimension(200, 100)); SimpleInternalFrame treeView = new SimpleInternalFrame("Explorer"); treeView.setContent(tree); // // PROPERTY SHEET // StyleSheetPanel sheet = new StyleSheetPanel(); sheet.contextualize(getContext()); SimpleInternalFrame sheetView = new SimpleInternalFrame("Properties"); sheetView.setContent(sheet); // // PREVIEW PANEL // final PreviewPanel preview = new PreviewPanel(); Icon icon = IconPool.shared().get("icons/reload.png"); Action updatePreviewAction = new AbstractAction("update", icon) { /** * */ private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent e) { preview.setSynthLookAndFeel(); } }; preview.setSynthLookAndFeel(config); JToolBar tb = new JToolBar(); tb.setRollover(true); tb.add(updatePreviewAction); SimpleInternalFrame previewView = new SimpleInternalFrame("Preview", tb, preview); JSplitPane leftSplit = Factory.createStrippedSplitPane(JSplitPane.VERTICAL_SPLIT, treeView, sheetView, 0); leftSplit.setDividerLocation(200); JSplitPane mainSplit = Factory.createStrippedSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftSplit, previewView, 0); mainSplit.setDividerLocation(200); getContentPane().add("Center", mainSplit); mainSplit.setBorder(LookAndFeelTweaks.PANEL_BORDER); } public static void main(String[] args) throws Exception { EventQueue.invokeLater(new Runnable() { public void run() { try { UIManager.put("swing.boldMetal", Boolean.FALSE); UIManager.put("ToolBar.isRollover", Boolean.TRUE); UIManager.setLookAndFeel(new Plastic3DLookAndFeel()); } catch (Exception e) { } LookAndFeelTweaks.tweak(); DefaultAppContext context = new DefaultAppContext(); Main main = new Main(); main.initialize(context); main.setSize(800, 600); main.setLocationRelativeTo(null); UserPreferences.track(main); main.setVisible(true); } }); } }