提交 15bf253b 编写于 作者: A ant

8020927: JLightweightFrame API should export layout properties change notifications

Reviewed-by: anthony
上级 b4243e14
......@@ -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);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册