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

8020927: JLightweightFrame API should export layout properties change notifications

Reviewed-by: anthony
上级 b4243e14
...@@ -29,12 +29,18 @@ import java.awt.BorderLayout; ...@@ -29,12 +29,18 @@ import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Container; import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue; import java.awt.EventQueue;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Rectangle; 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.BufferedImage;
import java.awt.image.DataBufferInt; import java.awt.image.DataBufferInt;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.security.AccessController; import java.security.AccessController;
import javax.swing.JLayeredPane; import javax.swing.JLayeredPane;
...@@ -80,6 +86,8 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan ...@@ -80,6 +86,8 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
private boolean copyBufferEnabled; private boolean copyBufferEnabled;
private int[] copyBuffer; private int[] copyBuffer;
private PropertyChangeListener layoutSizeListener;
/** /**
* Constructs a new, initially invisible {@code JLightweightFrame} * Constructs a new, initially invisible {@code JLightweightFrame}
* instance. * instance.
...@@ -94,6 +102,23 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan ...@@ -94,6 +102,23 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
if (getGraphicsConfiguration().isTranslucencyCapable()) { if (getGraphicsConfiguration().isTranslucencyCapable()) {
setBackground(new Color(0, 0, 0, 0)); 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 ...@@ -104,10 +129,23 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
* *
* @param content the {@link LightweightContent} instance * @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.content = content;
this.component = content.getComponent(); 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(); initInterior();
} }
...@@ -202,6 +240,25 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan ...@@ -202,6 +240,25 @@ public final class JLightweightFrame extends LightweightFrame implements RootPan
contentPane.setLayout(new BorderLayout()); contentPane.setLayout(new BorderLayout());
contentPane.add(component); contentPane.add(component);
setContentPane(contentPane); 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") @SuppressWarnings("deprecation")
......
...@@ -161,4 +161,22 @@ public interface LightweightContent { ...@@ -161,4 +161,22 @@ public interface LightweightContent {
* application that the frame has ungrabbed focus. * application that the frame has ungrabbed focus.
*/ */
public void focusUngrabbed(); 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.
先完成此消息的编辑!
想要评论请 注册