com.jidesoft.swing.ResizableDialog Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jide-oss Show documentation
Show all versions of jide-oss Show documentation
JIDE Common Layer (Professional Swing Components)
/*
* @(#)ResizableDialog.java
*
* Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
*/
package com.jidesoft.swing;
import com.jidesoft.utils.PortingUtils;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* A resizable undecorated dialog.
*/
public class ResizableDialog extends JDialog implements ResizableSupport {
private ResizablePanel _resizablePanel;
private boolean _routingKeyStrokes;
public ResizableDialog() throws HeadlessException {
initComponents();
}
public ResizableDialog(Frame owner) throws HeadlessException {
super(owner);
initComponents();
}
public ResizableDialog(Frame owner, boolean modal) throws HeadlessException {
super(owner, modal);
initComponents();
}
public ResizableDialog(Frame owner, String title) throws HeadlessException {
super(owner, title);
initComponents();
}
public ResizableDialog(Frame owner, String title, boolean modal) throws HeadlessException {
super(owner, title, modal);
initComponents();
}
public ResizableDialog(Frame owner, String title, boolean modal, GraphicsConfiguration gc) {
super(owner, title, modal, gc);
initComponents();
}
public ResizableDialog(Dialog owner) throws HeadlessException {
super(owner);
initComponents();
}
public ResizableDialog(Dialog owner, boolean modal) throws HeadlessException {
super(owner, modal);
initComponents();
}
public ResizableDialog(Dialog owner, String title) throws HeadlessException {
super(owner, title);
initComponents();
}
public ResizableDialog(Dialog owner, String title, boolean modal) throws HeadlessException {
super(owner, title, modal);
initComponents();
}
public ResizableDialog(Dialog owner, String title, boolean modal, GraphicsConfiguration gc) throws HeadlessException {
super(owner, title, modal, gc);
initComponents();
}
/**
* Initializes the resizable window.
*/
protected void initComponents() {
setModal(false);
setUndecorated(true);
_resizablePanel = new ResizablePanel() {
@Override
protected Resizable createResizable() {
return new Resizable(this) {
@Override
public void resizing(int resizeDir, int newX, int newY, int newW, int newH) {
Container container = ResizableDialog.this.getContentPane();
PortingUtils.setPreferredSize(container, new Dimension(newW, newH));
if (ResizableDialog.this.isUndecorated()) {
ResizableDialog.this.setBounds(newX, newY, newW, newH);
}
ResizableDialog.this.resizing();
}
@Override
public void beginResizing(int resizeCorner) {
super.beginResizing(resizeCorner);
ResizableDialog.this.beginResizing();
}
@Override
public void endResizing(int resizeCorner) {
super.endResizing(resizeCorner);
ResizableDialog.this.endResizing();
}
@Override
public boolean isTopLevel() {
return true;
}
};
}
@Override
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
boolean processed = super.processKeyBinding(ks, e, condition, pressed);
if (processed || e.isConsumed() || !isRoutingKeyStrokes())
return processed;
// check if the root pane of the source component has any registered action
if (e.getSource() instanceof JComponent) {
JRootPane rootPane = ((JComponent) e.getSource()).getRootPane();
Class componentClass = rootPane.getClass();
while (componentClass != JComponent.class && componentClass != null) {
componentClass = componentClass.getSuperclass();
}
try {
if (componentClass != null) {
Method m = componentClass.getDeclaredMethod("processKeyBinding", new Class[]{KeyStroke.class, KeyEvent.class, int.class, boolean.class});
m.setAccessible(true);
processed = (Boolean) m.invoke(rootPane, ks, e, JComponent.WHEN_IN_FOCUSED_WINDOW, pressed);
}
}
catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
catch (InvocationTargetException e1) {
e1.printStackTrace();
}
catch (IllegalAccessException e1) {
e1.printStackTrace();
}
}
if (processed || e.isConsumed()) {
return processed;
}
Component routingParent = getRoutingComponent();
if (routingParent == null) {
return false;
}
KeyboardFocusManager.getCurrentKeyboardFocusManager().redispatchEvent(
routingParent, e);
return (e.isConsumed());
}
};
setContentPane(_resizablePanel);
// make sure the content pane resized along with the window.
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
_resizablePanel.setSize(getSize());
}
});
}
protected void beginResizing() {
}
protected void resizing() {
}
protected void endResizing() {
}
/**
* Sets the border of the resizable window. Do not pass in an empty border. Otherwise the window won't be
* resizable.
*
* @param border the border.
*/
public void setBorder(Border border) {
_resizablePanel.setBorder(border);
}
/**
* Gets the border of the resizable window. By default, UIManagerLookup.getBorder("Resizable.resizeBorder")
* will be used.
*
* @return the border.
*/
public Border getBorder() {
return _resizablePanel.getBorder();
}
/**
* Gets the underlying Resizable.
*
* @return the Resizable.
*/
public Resizable getResizable() {
return _resizablePanel.getResizable();
}
public Component getRoutingComponent() {
return getOwner();
}
public void setRoutingKeyStrokes(boolean routingKeyStrokes) {
_routingKeyStrokes = routingKeyStrokes;
}
public boolean isRoutingKeyStrokes() {
return _routingKeyStrokes;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy