组件的位置和尺寸
# 1. 组件的位置和尺寸的设置
关于设置组件(Component)位置(坐标) 和 尺寸(宽高)的方法有好几个:
// 设置坐标
void setLocation(int x, int y);
void setLocation(Point p)
// 设置尺寸
void setSize(int width, int height);
void setSize(Dimension d);
// 设置坐标和尺寸
void setBounds(int x, int y, int width, int height);
void setBounds(Rectangle r);
// 设置首选尺寸
void setPreferredSize(Dimension preferredSize);
// 设置最小尺寸
void setMinimumSize(Dimension minimumSize);
// 设置最大尺寸
void setMaximumSize(Dimension maximumSize);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
组件坐标和宽高的最终确定,和其所在父容器的布局管理器有关(除此之外还和其他因素有关)。布局管理器布局时对于某些需要子组件撑满指定边界的布局管理器(例如 BorderLayout、GridLayout 等),直接设置子组件的坐标和宽高,可能无效。
下面在使用 FlowLayout 布局的容器内设置子组件的宽高:
package com.xiets.swing;
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
JFrame jf = new JFrame("测试窗口");
jf.setSize(250, 250);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 创建内容面板,使用浮动布局
JPanel panel = new JPanel(new FlowLayout());
// 创建一个标签,设置其背景为灰色(方便查看组件边界)
JLabel label = new JLabel("一个标签");
label.setOpaque(true);
label.setBackground(Color.LIGHT_GRAY);
/*
* 设置标签的宽高,对于浮动布局,这里需要使用 首选尺寸,设置其他尺寸无效
*/
label.setPreferredSize(new Dimension(100, 100));
// 里设置坐标将无效,因为对于浮动布局设置其子组件的坐标无意义,坐标将在绘制显示后自动确定
// label.setLocation(...);
panel.add(label);
jf.setContentPane(panel);
// 绘制组件显示
jf.setVisible(true);
/* 到了这里,组件已绘制显示完成,坐标和尺寸才真正确定 */
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
结果展示:

上次更新: 2024-09-19 12:17:39