8020927: JLightweightFrame API should export layout properties change notifications
Reviewed-by: anthony
This commit is contained in:
parent
512135758b
commit
5807947c50
@ -29,12 +29,18 @@ import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Container;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.ComponentListener;
|
||||
import java.awt.event.ContainerEvent;
|
||||
import java.awt.event.ContainerListener;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.DataBufferInt;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.security.AccessController;
|
||||
|
||||
import javax.swing.JLayeredPane;
|
||||
@ -80,6 +86,8 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
|
||||
private boolean copyBufferEnabled;
|
||||
private int[] copyBuffer;
|
||||
|
||||
private PropertyChangeListener layoutSizeListener;
|
||||
|
||||
/**
|
||||
* Constructs a new, initially invisible {@code JLightweightFrame}
|
||||
* instance.
|
||||
@ -94,6 +102,23 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
|
||||
if (getGraphicsConfiguration().isTranslucencyCapable()) {
|
||||
setBackground(new Color(0, 0, 0, 0));
|
||||
}
|
||||
|
||||
layoutSizeListener = new PropertyChangeListener() {
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent e) {
|
||||
Dimension d = (Dimension)e.getNewValue();
|
||||
|
||||
if ("preferredSize".equals(e.getPropertyName())) {
|
||||
content.preferredSizeChanged(d.width, d.height);
|
||||
|
||||
} else if ("maximumSize".equals(e.getPropertyName())) {
|
||||
content.maximumSizeChanged(d.width, d.height);
|
||||
|
||||
} else if ("minimumSize".equals(e.getPropertyName())) {
|
||||
content.minimumSizeChanged(d.width, d.height);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -104,10 +129,23 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
|
||||
*
|
||||
* @param content the {@link LightweightContent} instance
|
||||
*/
|
||||
public void setContent(LightweightContent content) {
|
||||
public void setContent(final LightweightContent content) {
|
||||
if (content == null) {
|
||||
System.err.println("JLightweightFrame.setContent: content may not be null!");
|
||||
return;
|
||||
}
|
||||
this.content = content;
|
||||
this.component = content.getComponent();
|
||||
|
||||
Dimension d = this.component.getPreferredSize();
|
||||
content.preferredSizeChanged(d.width, d.height);
|
||||
|
||||
d = this.component.getMaximumSize();
|
||||
content.maximumSizeChanged(d.width, d.height);
|
||||
|
||||
d = this.component.getMinimumSize();
|
||||
content.minimumSizeChanged(d.width, d.height);
|
||||
|
||||
initInterior();
|
||||
}
|
||||
|
||||
@ -202,6 +240,25 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
|
||||
contentPane.setLayout(new BorderLayout());
|
||||
contentPane.add(component);
|
||||
setContentPane(contentPane);
|
||||
|
||||
contentPane.addContainerListener(new ContainerListener() {
|
||||
@Override
|
||||
public void componentAdded(ContainerEvent e) {
|
||||
Component c = JLightweightFrame.this.component;
|
||||
if (e.getChild() == c) {
|
||||
c.addPropertyChangeListener("preferredSize", layoutSizeListener);
|
||||
c.addPropertyChangeListener("maximumSize", layoutSizeListener);
|
||||
c.addPropertyChangeListener("minimumSize", layoutSizeListener);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void componentRemoved(ContainerEvent e) {
|
||||
Component c = JLightweightFrame.this.component;
|
||||
if (e.getChild() == c) {
|
||||
c.removePropertyChangeListener(layoutSizeListener);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
|
@ -161,4 +161,22 @@ public interface LightweightContent {
|
||||
* application that the frame has ungrabbed focus.
|
||||
*/
|
||||
public void focusUngrabbed();
|
||||
|
||||
/**
|
||||
* {@code JLightweightFrame} calls this method to notify the client
|
||||
* application that the content preferred size has changed.
|
||||
*/
|
||||
public void preferredSizeChanged(int width, int height);
|
||||
|
||||
/**
|
||||
* {@code JLightweightFrame} calls this method to notify the client
|
||||
* application that the content maximum size has changed.
|
||||
*/
|
||||
public void maximumSizeChanged(int width, int height);
|
||||
|
||||
/**
|
||||
* {@code JLightweightFrame} calls this method to notify the client
|
||||
* application that the content minimum size has changed.
|
||||
*/
|
||||
public void minimumSizeChanged(int width, int height);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user