本文引自“http://hi.baidu.com/lianglongqun/blog/item/3247ff3e3dfe3b3771cf6c37.html”
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(); }
}
|
分享到:
相关推荐
this.setSize(1000,800); setResizable(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); Container contentPane=getContentPane(); scrollPane.setPreferredSize(new Dimension(100,500)); ...
blafcheng.setPreferredSize(new Dimension(40,26)); blafchu.setPreferredSize(new Dimension(40,26)); blafkf.setPreferredSize(new Dimension(40,26)); blafpf.setPreferredSize(new Dimension(40,26)); ...
g2.setLabel("文件拷贝进度:"+g2.getValue()); g2.setPreferredSize(300, 400); } protected void startApp() throws MIDletStateChangeException { // try{ // mainform.setItemStateListener...
this.setSize(faceSize); //设置运行时窗口的位置 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2, ...
setSize(380,280); setIconImage(new ImageIcon("image\\tubiao.png").getImage()); Dimension displaySize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize=this.getSize(); ...
public Mycanvas(){ setPreferredSize(new Dimension(800,600)); tool=getToolkit(); myimage=tool.getImage("炼铁/image/卡通/魔卡3.jpg"); setOpaque(false); } public void paintComponent(Graphics g...
setPreferredSize(new Dimension(80, 60)); this.addMouseListener(this); } public void mouseClicked(MouseEvent arg0) {} public void mouseEntered(MouseEvent arg0) {} public void mouseExited...
this.setSize(faceSize); //设置运行时窗口的位置 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2, ...
如何用纯Java语言,200行代码,画三种不同的“圣诞树”,直接使用Graphics2D进行绘制一层树层,然后封装成组件可以重复使用。最后把几个树层堆积起来,添加上树干... tree.setPreferredSize(new Dimension(550,650)); }
setPreferredSize(new Dimension(width, heigth)); myball=new ball(this); mypad=new pad(this); this.setFocusable(true); this.requestFocus(); this.addKeyListener(this); } 2. 设计游戏循环,并通过线程来...
setSize(330,300); setVisible(true); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); add(text,BorderLayout.CENTER); try{ FileInputStream input=new FileInputStream(...
scrollPane.setPreferredSize(new Dimension(100,500)); contentPane.add (scrollPane, BorderLayout.SOUTH); //在工具栏中添加按钮组件 toolBar.add(picSave); toolBar.addSeparator(); toolBar.add...