本文引自“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(); }
}
|
分享到:
相关推荐
在Draw2D中,`Figure`类的`setPreferredSize(Dimension)`与`setSize(Dimension)`方法有所不同。`setSize()`仅调用`repaint()`更新显示,而不触发布局的重新计算。相反,`setPreferredSize()`不仅设置了图形的首选...
设置对话框大小的方法通常包括`setSize()`和`setPreferredSize()`。例如,`dialog.setSize(width, height)`将对话框的宽度设为指定的width,高度设为height。`setPreferredSize(new Dimension(width, height))`则...
frame.setSize(400, 300); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true); } } ``` 上述代码创建...
你可以使用`setSize()`或`setPreferredSize()`方法设定大小: ```java JDialog dialog = new JDialog(frame, "我的对话框"); dialog.setSize(300, 200); ``` JavaFX中,使用`Dialog`类,通过`setWidth()`和`set...
this.setSize(1000,800); setResizable(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); Container contentPane=getContentPane(); scrollPane.setPreferredSize(new Dimension(100,500)); ...
从 API 来看,该方法的作用相当于 setLocation() 与 setSize() 的总和。 setBounds() 方法的使用 在实际使用时,需将容器的 layout 设置为 null,因为使用布局管理器时,控件的位置与尺寸是由布局管理器来分配的。...
9. **组件的可见性与大小**: Component类是所有AWT组件的基类,提供了setVisible()方法控制组件的可见性,以及setSize()和setPreferredSize()方法调整组件的大小。 10. **窗口事件**: AWT中存在窗口事件,如...
2. **基本属性设置**:接着,可以设置组件的基本属性,比如大小(setSize()或setPreferredSize())、位置(setLocation())以及是否可见(setVisible())。 3. **外观与颜色**:然后,设置组件的外观属性,如背景色...
setSize(500, 500); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { ...
frame.setSize(150, 150); frame.setVisible(true); } } ``` 2. **构造函数解析**: - 初始化按钮,并设置其首选大小为正方形。 - 设置按钮内容区域不填充背景色,以便后续自定义绘制。 3. **...
fr.setSize(500, 200); fr.setResizable(true); ``` 这些方法使得开发者能够更精细地控制GUI界面的外观和行为,提供更加用户友好的体验。 总之,通过合理利用Java的布局管理器,尤其是`BorderLayout`,并结合组件...
`setSize()`方法用于设置窗口的初始大小,而`setVisible(true)`使窗口可见。 Swing组件的设计遵循MVC(Model-View-Controller)模式,允许开发者分离界面逻辑和业务逻辑,提供更好的可维护性和可扩展性。此外,...
4. **显示与设置大小**:使用`setVisible(true)`使JFrame可见,`setSize(int width, int height)`或`setPreferredSize(Dimension dimension)`来设定窗口大小。 5. **窗口事件**:JFrame支持窗口事件,如关闭事件。...
- 设置位置和大小:`setLocation()`, `setSize()`或`setPreferredSize()`来调整对话框的位置和大小。 - 显示对话框:`setVisible(true)`来显示对话框。 3. **事件监听** - 在按钮上添加ActionListener,当按钮被...
2. 设置窗口大小:`setSize(int width, int height)`或`setPreferredSize(Dimension dim)`。 3. 设置窗口位置:`setLocation(int x, int y)`。 4. 设置窗口是否可最小化、最大化或关闭:`setResizable(boolean ...
对于`JPanel`组件而言,直接调用`setSize()`方法设置大小往往不会生效,因为Swing的设计理念是依赖于布局管理器来自动调整组件的大小。正确的做法是: 1. **使用`setPreferredSize()`方法**:这允许指定首选尺寸,...
- `setSize`或`setPreferredSize`设置窗口大小。 - `setIconImage`设置窗口图标。 - `setLocation`或`setLocationByPlatform`指定窗口在屏幕上的位置。 - 背景颜色和背景图片的设置可能需要自定义组件的背景,这通常...
对于Frame,可以调用`setSize()`或`setPreferredSize()`方法;对于其他组件,可能需要调用`setBounds()`或`revalidate()`来更新其尺寸和位置。 4. **布局管理**:Java Swing提供了多种布局管理器,如FlowLayout、...
- 设置窗口尺寸:`frame.setSize(400, 300);` — 宽度为400像素,高度为300像素。 #### 5. 获取并设置容器布局 - **获取内容面板**:`Container container = frame.getContentPane();` - **设置布局管理器**:`...