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

📄 posdialog.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: PosDialog.java 6465 2006-01-04 06:42:36Z jonesde $ * * Copyright (c) 2004 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */package org.ofbiz.pos.screen;import java.awt.Component;import java.awt.Container;import java.awt.Dimension;import java.awt.Frame;import java.awt.Point;import java.awt.Window;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.awt.event.FocusListener;import java.awt.event.FocusEvent;import java.awt.event.ComponentListener;import java.awt.event.ComponentEvent;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JRootPane;import net.xoetrope.swing.XButton;import net.xoetrope.swing.XTextArea;import net.xoetrope.xui.XPage;import net.xoetrope.xui.XProjectManager;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.cache.UtilCache;/** *  * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version    $Rev: 6465 $ * @since      3.2 */public class PosDialog {    public static final String module = PosDialog.class.getName();    protected static UtilCache instances = new UtilCache("pos.Dialogs", 0, 0);    protected final Frame clientFrame = XProjectManager.getCurrentProject().getAppFrame();    protected final Window appWindow = XProjectManager.getCurrentProject().getAppWindow();    protected DialogCallback cb = null;    protected Component parent = null;    protected JDialog dialog = null;    protected XTextArea output = null;    protected XButton closeBtn = null;    protected XPage page = null;    protected boolean modal = true;    protected int padding = 0;    public static PosDialog getInstance(XPage page) {        return getInstance(page, true, 0);    }    public static PosDialog getInstance(XPage page, boolean modal, int padding) {        PosDialog dialog = (PosDialog) instances.get(page);        if (dialog == null) {            synchronized(PosDialog.class) {                dialog = (PosDialog) instances.get(page);                if (dialog == null) {                    dialog = new PosDialog(page, modal, padding);                    instances.put(page, dialog);                }            }        }        dialog.modal = modal;        dialog.padding = padding;        dialog.pack();        return dialog;    }    protected PosDialog(XPage page, boolean modal, int padding) {        this.page = page;        this.modal = modal;        this.padding = padding;        this.configure();    }    protected void configure() {        // create the new dialog box        this.dialog = new JDialog(clientFrame, "Alert", modal);        dialog.setUndecorated(true);        dialog.setResizable(false);        dialog.setSize(page.getSize());        dialog.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);        // find the output edit object        this.output = (XTextArea) page.findComponent("dialog_output");        if (this.output != null) {            this.output.setWrapStyleWord(true);            this.output.setLineWrap(true);            this.output.setEditable(false);        }        // set the page pieces        Component[] coms = page.getComponents();        for (int i = 0; i < coms.length; i++) {            dialog.getContentPane().add(coms[i]);            coms[i].setVisible(true);        }        // set the close button        this.setCloseBtn(dialog);        // fix the layout and size        this.pack();        // adjust the dialog location        Dimension wSize = dialog.getSize();        dialog.setLocation(appWindow.getLocation().x + (appWindow.getSize().width / 2 - wSize.width / 2),                appWindow.getLocation().y + (appWindow.getSize().height / 2 - wSize.height / 2));        // set the component listener        final PosDialog  thisPosDialog = this;        dialog.addComponentListener(new ComponentListener() {            public void componentResized(ComponentEvent event) {                this.reset();            }            public void componentMoved(ComponentEvent event) {                this.reset();            }            public void componentShown(ComponentEvent event) {                this.reset();            }            public void componentHidden(ComponentEvent event) {                this.reset();            }            public void reset() {                if (dialog.isEnabled()) {                                        thisPosDialog.checkSize();                    Dimension wSize = dialog.getSize();                    dialog.setLocation(appWindow.getLocation().x + (appWindow.getSize().width / 2 - wSize.width / 2),                    appWindow.getLocation().y + (appWindow.getSize().height / 2 - wSize.height / 2));                    dialog.requestFocus();                }            }        });        // set the window listener        dialog.addWindowListener(new WindowListener() {            public void windowClosing(WindowEvent e) {            }            public void windowActivated(WindowEvent e) {            }            public void windowDeactivated(WindowEvent e) {                this.reset();            }            public void windowClosed(WindowEvent e) {            }            public void windowOpened(WindowEvent e) {            }            public void windowDeiconified(WindowEvent e) {            }            public void windowIconified(WindowEvent e) {            }            public void reset() {                // always keep focus if we are enabled                if (dialog.isEnabled()) {                    dialog.requestFocus();                }            }        });        // set the focus listener        dialog.addFocusListener(new FocusListener() {            public void focusGained(FocusEvent event) {            }            public void focusLost(FocusEvent event) {                if (dialog.isEnabled()) {                    Component focused = event.getOppositeComponent();                    if (focused == null || !"closeBtn".equals(focused.getName())) {                        dialog.requestFocus();                    }                }            }        });    }    public void showDialog(Container parent, DialogCallback cb, String text) {        this.parent = parent;        this.cb = cb;        if (text != null) {            this.setText(text);        }        // don't allow the main window to take focus        appWindow.setFocusable(false);        parent.setFocusable(false);        dialog.setFocusable(true);        dialog.setEnabled(true);        dialog.setVisible(true);        dialog.requestFocus();        dialog.repaint();    }    public void setText(String text) {        if (this.output != null) {            this.output.setText(text);        } else if (this.closeBtn != null) {            this.closeBtn.setText("<html><center>" + text + "</center></html>");        } else {            Debug.log("PosDialog output edit box is NULL!", module);        }    }    public String getName() {        return page.getName();    }    protected void close() {        // close down the dialog        dialog.setEnabled(false);        dialog.setVisible(false);        dialog.setFocusable(false);        // refocus the parent window        appWindow.setFocusable(true);        appWindow.requestFocus();        parent.setFocusable(true);        parent.requestFocus();        // callback the parent        if (cb != null) {            cb.receiveDialogCb(this);        }    }    private void setCloseBtn(Container con) {        Component[] coms = con.getComponents();        for (int i = 0; i < coms.length; i++) {            if (coms[i].getName() != null && "closeBtn".equals(coms[i].getName())) {                if (coms[i] instanceof XButton) {                    this.closeBtn = (XButton) coms[i];                    JButton b = (JButton) coms[i];                    b.addActionListener(new ActionListener() {                        public void actionPerformed(ActionEvent event) {                            dialog.setEnabled(false);                            close();                        }                    });                } else {                    Debug.logWarning("Found component with name 'closeBtn' but was not an instance of JButton", module);                }            } else if (coms[i] instanceof Container) {                setCloseBtn((Container) coms[i]);            } else {                coms[i].requestFocus();            }        }    }    private void pack() {        dialog.pack();        Dimension pageSize = page.getSize();        if (pageSize.getHeight() > 0 || pageSize.getWidth() > 0) {            dialog.setSize(page.getSize());        } else {            Container contentPane = dialog.getContentPane();            Point size = this.getMaxCoordinates(contentPane);            this.setSize(size.x + 2 * padding + 2, size.y + 2 * padding + 4);        }    }    private void checkSize() {        Dimension wSize = dialog.getSize();        Container contentPane = dialog.getContentPane();        Point size = this.getMaxCoordinates(contentPane);        size.x += 2 * padding + 2;        size.y += 2 * padding + 4 + 2;        if ( size.x != wSize.width || size.y != wSize.height ) {            this.pack();        }    }    private void setSize(int width, int height) {        dialog.getContentPane().setBounds(padding, padding, width - (padding * 2), height - (padding * 2));        dialog.setSize(width, height + 2);    }    private Point getMaxCoordinates(Container cont) {        Point pt = cont.getLocation();        int maxX = pt.x;        int maxY = pt.y;        int numChildren = cont.getComponentCount();        for (int i = 0; i < numChildren; i++) {            Component comp = cont.getComponent(i);            Dimension size = comp.getSize();            Point p = comp.getLocation();            maxX = Math.max(pt.x + p.x + size.width, maxX);            maxY = Math.max(pt.y + p.y + size.height, maxY);            if (comp instanceof Container) {                Point childDim = this.getMaxCoordinates((Container) comp);                maxX = Math.max(childDim.x, maxX);                maxY = Math.max(childDim.y, maxY);            }        }        return new Point(maxX, maxY);    }}

⌨️ 快捷键说明

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