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

📄 jmdidesktoppane.java

📁 优秀的打印控件全源代码,类似水晶表的设计器!
💻 JAVA
字号:
/* * JMDIDesktopPane.java * **  iReport  --  Visual designer for generating JasperReports Documents *  Copyright (C) 2002-2003  Giulio Toffoli gt@businesslogic.it * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *  Giulio Toffoli *  Via T.Aspetti, 233 *  35100 Padova ITALY *  gt@businesslogic.it * * Created on 7 febbraio 2003, 23.06 */package it.businesslogic.ireport.gui;import it.businesslogic.ireport.gui.event.*;import java.beans.*;import java.util.*;import javax.swing.*;/** * JMDIDesktopPane is an evolution of the very trivial javax.swing.JDesktopPane. * This class add a lot of event for really handle a DesktopPane. With this * improvements we will able to handle internal windows menu list, activated window events, * and more...   *  * * @author  Administrator */public class JMDIDesktopPane extends javax.swing.JDesktopPane implements java.io.Serializable {             private static final String PROP_SAMPLE_PROPERTY = "SampleProperty";        private String sampleProperty;        private PropertyChangeSupport propertySupport;        /** Utility field used by event firing mechanism. */    private javax.swing.event.EventListenerList listenerList =  null;        /** Creates new JMDIDesktopPane */    public JMDIDesktopPane() {        super();        propertySupport = new PropertyChangeSupport( this );            }        public void internalFrameActivated(JMDIFrame jMDIFrame)    {        this.fireInternalFrameActivatedListenerInternalFrameActivated(new InternalFrameActivatedEvent(jMDIFrame));    }        public void internalFrameClosed(JMDIFrame jMDIFrame)    {              if (this.getAllFrames().length == 1)        {            this.fireInternalFrameActivatedListenerInternalFrameActivated(new InternalFrameActivatedEvent(null) );        }        this.fireInternalFrameActivatedListenerInternalFrameActivated(new InternalFrameActivatedEvent(jMDIFrame, InternalFrameActivatedEvent.CLOSED ) );    }            public String getSampleProperty() {        return sampleProperty;    }        public void setSampleProperty(String value) {        String oldValue = sampleProperty;        sampleProperty = value;        propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, sampleProperty);    }            public void addPropertyChangeListener(PropertyChangeListener listener) {        if (listener == null || propertySupport == null) return;        propertySupport.addPropertyChangeListener(listener);    }        public void removePropertyChangeListener(PropertyChangeListener listener) {        propertySupport.removePropertyChangeListener(listener);    }        /** Registers InternalFrameActivatedListener to receive events.     * @param listener The listener to register.     *     */    public synchronized void addInternalFrameActivatedListener(it.businesslogic.ireport.gui.event.InternalFrameActivatedListener listener) {        if (listenerList == null ) {            listenerList = new javax.swing.event.EventListenerList();        }        listenerList.add(it.businesslogic.ireport.gui.event.InternalFrameActivatedListener.class, listener);    }        /** Removes InternalFrameActivatedListener from the list of listeners.     * @param listener The listener to remove.     *     */    public synchronized void removeInternalFrameActivatedListener(it.businesslogic.ireport.gui.event.InternalFrameActivatedListener listener) {        listenerList.remove(it.businesslogic.ireport.gui.event.InternalFrameActivatedListener.class, listener);    }        /** Notifies all registered listeners about the event.     *     * @param event The event to be fired     *     */    private void fireInternalFrameActivatedListenerInternalFrameActivated(it.businesslogic.ireport.gui.event.InternalFrameActivatedEvent event) {        if (listenerList == null) return;        Object[] listeners = listenerList.getListenerList();        for (int i = listeners.length-2; i>=0; i-=2) {            if (listeners[i]==it.businesslogic.ireport.gui.event.InternalFrameActivatedListener.class) {                ((it.businesslogic.ireport.gui.event.InternalFrameActivatedListener)listeners[i+1]).internalFrameActivated(event);            }        }    }        public void cascade()    {        JInternalFrame[] frames = this.getAllFrames();        if (frames.length == 0) return;                JInternalFrame activeframe = this.getSelectedFrame();                int position =0;        for (int i=0; i<frames.length; ++i)        {            try {                    frames[i].setMaximum(false);                    frames[i].setIcon(false);                    frames[i].moveToFront();                } catch (Exception ex){}            if (frames[i] != activeframe)            {                frames[i].setLocation(position,position);                                position += 24;            }        }                if (activeframe != null)        {               activeframe.moveToFront();            activeframe.setLocation(position,position);        }    }        /* This method is ported from kdevelop'QextMdiChildArea     */    public void tileVertically()    {           JInternalFrame[] frames_tmp = this.getAllFrames();                if (frames_tmp.length == 0) return;        JInternalFrame[] frames = new JInternalFrame[frames_tmp.length];        if (this.getSelectedFrame() == null && frames_tmp[0].isIcon())        {            try {            frames_tmp[0].setIcon(false);            frames_tmp[0].setSelected(true);            } catch (Exception ex){ return; }        }                frames[0] = this.getSelectedFrame();                int k=1;        for (int i=0; i<frames_tmp.length; ++i)        {            if (frames_tmp[i] == frames[0]) continue;            frames[k] = frames_tmp[i];            k++;        }        //adjust the arry to have the selected win in the first position....                        int w = getWidth() / frames.length;	int lastWidth = 0;	if( frames.length > 1)            lastWidth = getWidth() - (w * (frames.length - 1));        else            lastWidth = w;	        int h = getHeight();	int posX = 0;	int countVisible = 0;        for (int i=0; i<frames.length; ++i)        {            try {                    frames[i].setMaximum(false);                    frames[i].setIcon(false);                    frames[i].moveToFront();                } catch (Exception ex){}                        if( i < frames.length) {                frames[i].setLocation(posX, 0);                frames[i].setSize(w, h);                posX += w;            }            else { // last visible childframe                frames[i].setLocation(posX, 0);                frames[i].setSize(lastWidth, h);            }        }         }        /* This method is ported from kdevelop'QextMdiChildArea     */    public void tileHorizontally()    {        JInternalFrame[] frames_tmp = this.getAllFrames();                if (frames_tmp.length == 0) return;        JInternalFrame[] frames = new JInternalFrame[frames_tmp.length];         if (this.getSelectedFrame() == null && frames_tmp[0].isIcon())        {            try {            frames_tmp[0].setIcon(false);            frames_tmp[0].setSelected(true);            } catch (Exception ex){ return; }        }        frames[0] = this.getSelectedFrame();                int k=1;        for (int i=0; i<frames_tmp.length; ++i)        {            if (frames_tmp[i] == frames[0]) continue;            else            {                frames[k] = frames_tmp[i];                k++;            }        }        //adjust the arry to have the selected win in the first position....                        int w = getWidth() ;		        int h = getHeight() / frames.length;                int lastHeight = 0;	if( frames.length > 1)            lastHeight = getHeight() - (h * (frames.length - 1));        else            lastHeight = h;        	int posY = 0;	int countVisible = 0;        for (int i=0; i<frames.length; ++i)        {            try {                    frames[i].setMaximum(false);                    frames[i].setIcon(false);                    frames[i].moveToFront();                } catch (Exception ex){}                        if( i < frames.length) {                frames[i].setLocation(0,posY);                frames[i].setSize(w, h);                posY += h;            }            else { // last visible childframe                frames[i].setLocation(0,posY);                frames[i].setSize(w,lastHeight);            }        }               }        /* This method is ported from kdevelop'QextMdiChildArea     */    public void tileAnodine()    {        JInternalFrame[] frames_tmp = this.getAllFrames();                if (frames_tmp.length == 0) return;        JInternalFrame[] frames = new JInternalFrame[frames_tmp.length];                if (this.getSelectedFrame() == null && frames_tmp[0].isIcon())        {            try {            frames_tmp[0].setIcon(false);            frames_tmp[0].setSelected(true);            } catch (Exception ex){ return; }        }                frames[0] = this.getSelectedFrame();            int k=1;        for (int i=0; i<frames_tmp.length; ++i)        {            if (frames_tmp[i] == frames[0]) continue;            frames[k] = frames_tmp[i];            k++;        }        	int numVisible=frames.length;	if(numVisible<1)return;	int numCols= (int)Math.sqrt(numVisible); // set columns to square root of visible count	// create an array to form grid layout	int[] numRows=new int[numCols];	int numCurCol=0;	while(numCurCol<numCols){		numRows[numCurCol]=numCols; // create primary grid values		numCurCol++;	}	int numDiff=numVisible-(numCols*numCols); // count extra rows	int numCurDiffCol=numCols; // set column limiting for grid updates	while(numDiff>0){		numCurDiffCol--;		numRows[numCurDiffCol]++; // add extra rows to column grid		if(numCurDiffCol<1)numCurDiffCol=numCols; // rotate through the grid		numDiff--;	}	numCurCol=0;	int numCurRow=0;	int curX=0;	int curY=0;	// the following code will size everything based on my grid above	// there is no limit to the number of windows it will handle	// it's great when a kick-ass theory works!!!                      // Pragma :)	int xQuantum= getWidth()/numCols;	int yQuantum= getHeight()/numRows[numCurCol];               	for (int i=0; i<frames.length; ++i)        {               try {                    frames[i].setMaximum(false);                    frames[i].setIcon(false);                    frames[i].moveToFront();                } catch (Exception ex){}                frames[i].setLocation(curX,curY);                frames[i].setSize(xQuantum, yQuantum);		numCurRow++;		curY+=yQuantum;		if(numCurRow==numRows[numCurCol]){				numCurRow=0;				numCurCol++;				curY=0;				curX+=xQuantum;				if(numCurCol!=numCols)yQuantum= getHeight()/numRows[numCurCol];			}        }    }        }

⌨️ 快捷键说明

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