113 lines
1.9 KiB
Java
113 lines
1.9 KiB
Java
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();
|
|
|
|
if(dp != null) {
|
|
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;
|
|
}
|
|
|
|
|
|
}
|