package org.hwo.ui; import javax.swing.JInternalFrame; import java.awt.Component; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; public class JExtendedInternalFrame extends JInternalFrame { private static final long serialVersionUID = 1L; private boolean keepInDesktopPane; public JExtendedInternalFrame() { this.putClientProperty("JInternalFrame.frameType", "normal"); addComponentListener(new ComponentAdapter() { @Override public void componentMoved(ComponentEvent e) { Component dp = getParent(); Dimension dpr = dp.getSize(); Rectangle b = getBounds(); boolean reset = false; if (b.x < 0) { reset = true; b.x = 0; } if (b.y < 0) { reset = true; b.y = 0; } if (b.x + b.width > dpr.width) { b.x = dpr.width - b.width; reset = true; } if (b.y + b.height > dpr.height){ b.y = dpr.height - b.height; reset = true; } if (reset) { setBounds(b); } } @Override public void componentResized(ComponentEvent e) { Component dp = getParent(); Dimension dpr = dp.getSize(); Rectangle b = getBounds(); boolean reset = false; if (b.x < 0) { reset = true; b.width += b.x; b.x = 0; } if (b.y < 0) { reset = true; b.height += b.y; b.y = 0; } if (b.x + b.width > dpr.width) { b.width = dpr.width - b.x; reset = true; } if (b.y + b.height > dpr.height){ b.height = dpr.height - b.y; reset = true; } if (reset) { setBounds(b); } } }); } public boolean isKeepInDesktopPane() { return keepInDesktopPane; } public void setKeepInDesktopPane(boolean keepInDesktopPane) { this.keepInDesktopPane = keepInDesktopPane; } }