swing的 setbounds 不生效
时间: 2023-08-07 19:52:57 浏览: 268
可能是因为你没有调用 `setPreferredSize` 方法或者没有在容器中使用 `pack` 方法。`setBounds` 方法只有在父容器使用布局管理器时才会生效,而不是在使用 `null` 布局管理器时。如果你使用 `null` 布局管理器,请确保你已经设置了每个组件的位置和大小。另外,你可以尝试使用其他布局管理器,例如 `FlowLayout` 或 `GridBagLayout` 等,这些布局管理器会自动调整组件的大小和位置。
相关问题
Swing图形界面程序设计中如何确定一个容器的大小和位置。
在Swing图形界面程序设计中,你可以通过设置容器的`LayoutManager`来控制其大小和位置。以下是一些常用的方式:
1. **FlowLayout**:这是默认布局管理器,它根据组件添加的顺序自动调整容器大小。如果需要指定宽度,可以使用`setPreferredSize()`方法。
```java
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.setPreferredSize(new Dimension(400, 300));
```
2. **BorderLayout**:这种布局管理器将组件分为5个区域,如上、下、左、右和中心。你可以使用`add()`方法并指定` BorderLayout.CENTER`, `BorderLayout.NORTH`, etc. 来定位组件。
```java
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.add(jPanel, BorderLayout.CENTER);
```
3. **GridLayout**:网格布局管理器允许你按照行和列整齐地放置组件。可以指定列数和是否固定行高和列宽。
```java
JPanel panel = new JPanel(new GridLayout(3, 2));
```
4. **CardLayout**:卡片布局管理器可以在单个容器内切换不同的视图。
```java
JPanel container = new JPanel(new CardLayout());
container.add(card1, "first");
container.add(card2, "second");
```
5. **GridBagLayout**:更高级的网格布局管理器,允许你精确地对齐和填充组件到网格单元。
```java
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
container.add(component, constraints);
```
每个容器还可以通过`setSize()`, `setLocation()`, 或者`setBounds()`方法直接设置尺寸和位置。记得在布局完成后调用`pack()`方法让布局生效,并根据需要调用`setVisible(true)`显示窗口。
阅读全文