📄 jmdidesktoppane.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 + -