自定义布局管理器, setSize和setPreferredSize的区别
来源:互联网 发布:tcl网络电视怎么联网 编辑:程序博客网 时间:2024/05/17 03:49
setPreferredSize用于布局管理器。
在使用布局管理器的时候,可以不使用setSize(),因为布局管理器会自动调用组件的setSize方法设置组件的大小。即使用户调用setSize方法设置组件大小,最终可能被覆盖。参照下面的布局管理器了解被覆盖的过程。
下面给出一个简单的布局管理器CenterLayout(将容器中的组件(最多只能有一个可见)居中显示)
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.io.Serializable;
public class CenterLayout implements LayoutManager, Serializable {
@Override
public void addLayoutComponent(String name, Component comp) {
}
// 将组件compont, 在父容器中居中显示
private void center(Container parent, Component component) {
Dimension parentDimension = parent.getPreferredSize();
Dimension d = component.getPreferredSize();
int x = (parentDimension.width - d.width) / 2;
if (x < 0) {
x = 0;
}
int y = (parentDimension.height - d.height) / 2;
if (y < 0) {
y = 0;
}
component.setLocation(x, y);
}
// 返回并集
private Dimension union(Dimension d, Dimension d2) {
return new Dimension(Math.max(d.width, d2.width), Math.max(
d.height, d2.height));
}
@Override
public void layoutContainer(Container parent) {
synchronized (parent.getTreeLock()) {
Component[] components = parent.getComponents();
// 最多只能有一个组件是可见的
for (Component component : components) {
if (component.isVisible()) {
center(parent, component);
// 这句不能少,否则组件不能显示,除非组件调用过setSize。
//这句覆盖了用户之前调用的setSize方法。
component.setSize(component.getPreferredSize());
break;
}
}
}
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(0, 0);
}
@Override
public Dimension preferredLayoutSize(Container parent) {
synchronized (parent.getTreeLock()) {
Component[] components = parent.getComponents();
// 最多只能有一个组件是可见的
for (Component component : components) {
if (component.isVisible()) {
// 不能调用parent.getPreferredSize(),否则导致死循环
return union(parent.getSize(), component.getPreferredSize());
}
}
}
// 不能调用parent.getPreferredSize(),否则导致死循环
return parent.getSize();
}
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public String toString() {
return getClass().getName();
}
}
文章摘自:http://hi.baidu.com/lianglongqun/blog/item/3247ff3e3dfe3b3771cf6c37.html
- 自定义布局管理器, setSize和setPreferredSize的区别
- 自定义布局管理器, setSize和setPreferredSize的区别
- swing 中setSize和setPreferredSize的区别
- setSize和setPreferredSize的区别与应用
- setPreferredSize和setSize的区别及用法
- 【Swing基础】setPreferredSize和setSize的区别及用法
- 【Swing基础】setPreferredSize和setSize的区别及用法
- 【Swing基础】setPreferredSize和setSize的区别及用法
- swing中setSize和setPreferredSize区别
- swing中setSize与setPreferredsize的区别
- setPreferredSize和的setSize和setbounds的用法
- java setPreferredSize和setsize,setLocation,setBounds方法的不同
- java setPreferredSize和setsize,setLocation,setBounds方法的不同
- setPreferredSize---setSize
- setSize()和setPreferredSize(new Dimension())使用小结
- setPreferredSize()、getPreferredSize()与pack()的配合使用以及setSize()方法
- JButton中的setPreferredSize() 与 setSize()
- 自定义布局管理器
- 个人管理 - 认识无压工作GTD
- 十大好习惯
- ColumnTree -
- 腰椎间盘突出特效方
- base64加密
- 自定义布局管理器, setSize和setPreferredSize的区别
- VOA 学习总攻略
- LocalExitBox
- 番茄”让时间变成我们的朋友
- CloseHandle()函数(关闭线程句柄)的使用
- 让OGRE支持中文TTF字体
- C++操作符汇集
- QAudioDeviceInfo 类
- 在Visual Studio中使用ZedGraph控件的一些记录