⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adventuredemoex.java

📁 java实现浏览器等本地桌面的功能
💻 JAVA
字号:
/* * $Id: AdventureDemoEx.java,v 1.4 2005/07/01 15:53:16 kleopatra Exp $ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. */package org.jdesktop.demo.adventure;import java.awt.BorderLayout;import java.awt.Window;import javax.swing.BorderFactory;import javax.swing.JComponent;import javax.swing.JFormattedTextField;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingUtilities;import javax.swing.UIManager;import javax.swing.plaf.basic.BasicSplitPaneUI;import org.jdesktop.binding.DataModel;import org.jdesktop.binding.metadata.MetaData;import org.jdesktop.binding.swingx.BindingFactory;import org.jdesktop.binding.swingx.BindingHandler;import org.jdesktop.binding.swingx.DirectListBinding;import org.jdesktop.binding.swingx.DirectTableBinding;import org.jdesktop.binding.swingx.table.ColumnFactoryExt;import org.jdesktop.dataset.DataRelation;import org.jdesktop.dataset.DataRelationTable;import org.jdesktop.dataset.DataSet;import org.jdesktop.dataset.adapter.DataModelAdapter;import org.jdesktop.dataset.adapter.SelectionModelAdapter;import org.jdesktop.dataset.adapter.TabularDataModelAdapter;import org.jdesktop.demo.DemoPanel;import org.jdesktop.demo.MainWindow;import org.jdesktop.demo.swingx.common.MarginHighlighter;import org.jdesktop.swingx.JXImagePanel;import org.jdesktop.swingx.JXList;import org.jdesktop.swingx.JXPanel;import org.jdesktop.swingx.JXTable;import org.jdesktop.swingx.JXTitledPanel;import org.jdesktop.swingx.border.DropShadowBorder;import org.jdesktop.swingx.decorator.Highlighter;import org.jdesktop.swingx.decorator.HighlighterPipeline;import org.jdesktop.swingx.table.ColumnFactory;import com.jgoodies.forms.builder.PanelBuilder;import com.jgoodies.forms.factories.Borders;import com.jgoodies.forms.layout.CellConstraints;import com.jgoodies.forms.layout.FormLayout;/** * A modified version of the Adventure Demo. *  * Demonstrates ui-building in three phases *  * <ul> * <li> create and configure components * <li> build up the screen * <li> load and bind the data to components * </ul> *  * Note that data-related component configuration is left to the   * binding phase - it's done by modifying the MetaData of the DataModel. *  * * @author Richard Bair * @author Jeanette Winzenburg */public class AdventureDemoEx extends DemoPanel {	/**	 * Comment for <code>serialVersionUID</code>	 */	private static final long serialVersionUID = 3544670668122894901L;    private DropShadowBorder dsb = new DropShadowBorder(UIManager.getColor("Control"), 0, 8, .5f, 12, false, true, true, true);		private DataSet ds;    private JTextField nameTF;    private JTextField locationTF;    private JFormattedTextField priceTF;    private JTextArea descriptionTA;    private JXImagePanel imagePanel;    private JXList navigator;    private JTextField catNameTF;    private JXTable activitiesTBL;    private JLabel nameLabel;    private JLabel locationLabel;    private JLabel priceLabel;    private JLabel descriptionLabel;      /** Creates new form Adventure Demo */    public AdventureDemoEx() {        setName("Adventure Demo 2.3");                //init the gui components        initComponents();        configureComponents();        // build the screen        build();        // model, load and bind the data        bind();     }    private void bind() {        preBind();        // initialize the binding infrastructure        BindingFactory factory = BindingFactory.getInstance();        BindingHandler bindings = new BindingHandler();        bindings.setAutoCommit(true);                // bind packageDetails        DataModelAdapter packageModel = new DataModelAdapter(ds.getTable("package").getSelector("current"));        customizeMetaData(packageModel, false);        bindings.add(factory.createBinding(locationTF, packageModel, "location"));        bindings.add(factory.createMetaBinding(locationLabel, packageModel, "location"));        bindings.add(factory.createBinding(priceTF, packageModel, "price"));        bindings.add(factory.createMetaBinding(priceLabel, packageModel, "price"));        bindings.add(factory.createBinding(nameTF, packageModel, "name"));        bindings.add(factory.createMetaBinding(nameLabel, packageModel, "name"));        bindings.add(factory.createBinding(descriptionTA, packageModel, "description"));        bindings.add(factory.createMetaBinding(descriptionLabel, packageModel, "description"));//        bindings.add(new ImagePanelBinding(imagePanel, packageModel, "imageuri"));        // bind package list and selection of current details        TabularDataModelAdapter navModel = new TabularDataModelAdapter(ds.getTable("package"));        SelectionModelAdapter sm = new SelectionModelAdapter(ds.getTable("package").getSelector("current"));        bindings.add(new DirectListBinding(navigator, navModel, "name", sm));        // bind category table and details        // PENDING: category? why doesnt it work?//        DataModelAdapter categoryDetailModel = new DataModelAdapter(ds.getTable("categoryDetail").getSelector("current"));//        bindings.add(factory.createBinding(catNameTF, categoryDetailModel, "name"));        TabularDataModelAdapter activitiesDetailModel = new TabularDataModelAdapter(ds.getTable("activitiesDetail"));        customizeMetaData(activitiesDetailModel, true);        bindings.add(new DirectTableBinding(activitiesTBL, activitiesDetailModel, new String[]{"name", "description", "price"}));        postBind();    }     private void customizeMetaData(DataModel packageModel, boolean isActivitiesModel) {        // dumb label setting ... real world apps would f.i. read        // them from a localized resource file        String[] fieldNames = packageModel.getFieldNames();        for (int i = 0; i < fieldNames.length; i++) {            MetaData metaData = packageModel.getMetaData(fieldNames[i]);            String label = fieldNames[i].substring(1);            String capital = fieldNames[i].substring(0, 1).toUpperCase();            metaData.setLabel(capital + label);        }        if (isActivitiesModel) {            // layout hints for default column width            MetaData metaData = packageModel.getMetaData("description");            metaData.setDisplayWidth(64);            MetaData priceMeta = packageModel.getMetaData("price");            // JW: hack - elementClass should be set by the TabularDataModelAdapter            priceMeta.setElementClass(Number.class);            priceMeta.setDisplayWidth(8);        }      }    private void preBind() {        // model and load the data        createDataSet();        // JW: enable enhanced table column configuration        // this is temporary - should be automatically loaded         ColumnFactory.setInstance(new ColumnFactoryExt());    }    private void postBind() {        // JW: Hack - changing the selector value leads to firing tableStructureChanged        // so we turn auto-creation of tables off once they are bound        activitiesTBL.setAutoCreateColumnsFromModel(false);    }    private void configureComponents() {        activitiesTBL.setShowHorizontalLines(false);        activitiesTBL.setBorder(BorderFactory.createEmptyBorder());        activitiesTBL.setVisibleRowCount(6);        // fiddling the content inset        navigator.setBorder(listBorder);        navigator.setHighlighters(new HighlighterPipeline(new Highlighter[] { new MarginHighlighter(marginBorder)}));        descriptionTA.setLineWrap(true);        descriptionTA.setWrapStyleWord(true);    }        public void addNotify() {        super.addNotify();        // JW: quickhack - need to pack to configure JXTable... hmmm        // this is veery dirty - forget it quickly        Window window = SwingUtilities.windowForComponent(this);        window.pack();    }        private void initComponents() {        navigator = new JXList();        activitiesTBL = new JXTable();        imagePanel = new JXImagePanel();        nameTF = new JTextField();        locationTF = new JTextField();        priceTF = new JFormattedTextField();        catNameTF = new JTextField();        descriptionTA = new JTextArea();   }         private void build() {        JXTitledPanel navigatorPanel = new JXTitledPanel();        build(navigatorPanel, navigator, true, "Packages");        JXTitledPanel detailPanel = new JXTitledPanel();        build(detailPanel, null, true, "Package Details");        detailPanel.getContentContainer().add(buildPackageDetails());        JXTitledPanel activitiesPanel = new JXTitledPanel();        build(activitiesPanel, activitiesTBL, true, "Activities");                JSplitPane detailsSP = createSplitPane(350, JSplitPane.VERTICAL_SPLIT);        detailsSP.setLeftComponent(detailPanel);        detailsSP.setRightComponent(activitiesPanel);                JSplitPane mainSP = createSplitPane(240, JSplitPane.HORIZONTAL_SPLIT);        mainSP.setLeftComponent(navigatorPanel);        mainSP.setRightComponent(detailsSP);        setLayout(new BorderLayout());                setBorder(Borders.TABBED_DIALOG_BORDER);        add(mainSP);    }    private JSplitPane createSplitPane(int dividerLocation, int orientation) {        JSplitPane splitPane = new JSplitPane(orientation);        splitPane.setDividerLocation(dividerLocation);        splitPane.setBorder(null);      ((BasicSplitPaneUI)splitPane.getUI()).getDivider().setBorder(BorderFactory.createEmptyBorder());        return splitPane;    }        private void build(JXTitledPanel container, JComponent component, boolean opaque, String title) {        container.getContentContainer().setLayout(new BorderLayout());        container.setBorder(dsb);        container.setTitle(title);        if (component != null) {            component = buildScrollPane(component, opaque);            container.getContentContainer().add(component);        }    }    private JScrollPane buildScrollPane(JComponent component, boolean opaque) {      JScrollPane scrollPane = new JScrollPane(component);      scrollPane.setBorder(null);      scrollPane.setOpaque(opaque);      scrollPane.getViewport().setOpaque(opaque);      component.setOpaque(opaque);      return scrollPane;    }    private JComponent buildPackageDetails() {//        COLUMN SPECS://            r:d:n, l:3dluX:n, f:max(p;100dluX):g//            ROW SPECS:   //            c:d:n, t:4dluY:n, c:d:n, t:4dluY:n, c:d:n, t:4dluY:n, c:d:n, c:0px:g////            COLUMN GROUPS:  {}//            ROW GROUPS:     {}////            COMPONENT CONSTRAINTS//            ( 1,  1,  1,  1, "d=r, d=c"); javax.swing.JLabel      "name"; name=nameLabel//            ( 3,  1,  1,  1, "d=f, d=c"); javax.swing.JTextField; name=name//            ( 1,  3,  1,  1, "d=r, d=c"); javax.swing.JLabel      "location"; name=locationLabel//            ( 3,  3,  1,  1, "d=f, d=c"); javax.swing.JTextField; name=location//            ( 1,  5,  1,  1, "d=r, d=c"); javax.swing.JLabel      "price"; name=priceLabel//            ( 3,  5,  1,  1, "d=f, d=c"); javax.swing.JTextField; name=price//            ( 1,  7,  1,  1, "d=r, d=c"); javax.swing.JLabel      "description"; name=descriptionLabel//            ( 3,  7,  1,  2, "d=f, d=f"); javax.swing.JScrollPane; name=description        JXPanel details = new JXPanel();        FormLayout formLayout = new FormLayout(                "r:d:n, l:3dlu:n, f:max(p;100dlu):g", // columns                "c:d:n, t:4dlu:n, c:d:n, t:4dlu:n, c:d:n, t:4dlu:n, c:d:n, c:0px:g");  // rows        PanelBuilder builder = new PanelBuilder(details, formLayout);        builder.setDefaultDialogBorder();        CellConstraints cl = new CellConstraints();        CellConstraints cc = new CellConstraints();        // JW PENDING:         // label creation should be moved to initComponents - too lazy to do so for now        nameLabel = builder.addLabel("", cl.xywh(1, 1, 1, 1), nameTF, cc.xywh(3, 1, 1, 1));        locationLabel = builder.addLabel("", cl.xywh(1, 3, 1, 1), locationTF, cc.xywh(3, 3, 1, 1));        priceLabel = builder.addLabel("", cl.xywh(1, 5, 1, 1), priceTF, cc.xywh(3, 5, 1, 1));        descriptionLabel = builder.addLabel("", cl.xywh(1, 7, 1, 1), new JScrollPane(descriptionTA), cc.xywh(3, 7, 1, 2));        return details;    }         private void createDataSet() {    	ds = DataSet.createFromSchema(getClass().getResourceAsStream("resources/dataset.xsd"));        DataRelation packageToCategory = ds.createRelation();    	packageToCategory.setName("packageToCategory");    	packageToCategory.setParentColumn(ds.getTable("package").getColumn("catid"));    	packageToCategory.setChildColumn(ds.getTable("category").getColumn("catid"));    	    	DataRelation packageToActivityList = ds.createRelation();    	packageToActivityList.setName("packageToActivityList");    	packageToActivityList.setParentColumn(ds.getTable("package").getColumn("packageid"));    	packageToActivityList.setChildColumn(ds.getTable("activityList").getColumn("packageid"));                DataRelationTable activityListDetails = ds.createRelationTable();        activityListDetails.setName("activityListDetails");        activityListDetails.setRelation(packageToActivityList);        activityListDetails.setParentSelector(ds.getTable("package").getSelector("current"));                DataRelation activityListToActivity = ds.createRelation();        activityListToActivity.setName("activityListToActivity");        activityListToActivity.setParentColumn(ds.getTable("activityList").getColumn("activityid"));        activityListToActivity.setChildColumn(ds.getTable("activity").getColumn("activityid"));                DataRelationTable categoryDetail = ds.createRelationTable();        categoryDetail.setName("categoryDetail");        categoryDetail.setRelation(packageToCategory);        categoryDetail.setParentSelector(ds.getTable("package").getSelector("current"));                DataRelationTable activitiesDetail = ds.createRelationTable();        activitiesDetail.setName("activitiesDetail");        activitiesDetail.setRelation(activityListToActivity);        activitiesDetail.setParentTable(ds.getTable("activityListDetails"));        ds.readXml(getClass().getResourceAsStream("resources/dataset.xml"));    }    public static void main(String[] args) {       MainWindow.main(new String[]{"-d", "org.jdesktop.demo.adventure.AdventureDemoEx"});        //new AdventureDemo().setVisible(true);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -