吴志勇的博客 吴志勇的博客
  • h5

    • HTML5&CSS3
  • scss

    • css预处理语言
  • JavaScript

    • JavaScript教程
    • Ajax
    • ES6教程
    • NodeJS
    • Typescript
  • 框架

    • Jquery
    • VUE
    • React
  • Swing专题
  • java基础
  • javaweb
  • 框架
  • 数据库
  • netty
  • 设计模式
  • 微服务及架构
  • 云原生
  • maven
  • 单元测试
工具
我的
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

吴志勇

......
  • h5

    • HTML5&CSS3
  • scss

    • css预处理语言
  • JavaScript

    • JavaScript教程
    • Ajax
    • ES6教程
    • NodeJS
    • Typescript
  • 框架

    • Jquery
    • VUE
    • React
  • Swing专题
  • java基础
  • javaweb
  • 框架
  • 数据库
  • netty
  • 设计模式
  • 微服务及架构
  • 云原生
  • maven
  • 单元测试
工具
我的
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Swing专题

    • swing图形化界面简介

    • JavaSwing布局管理器

    • JavaSwing基本组件

    • JavaSwing面板组件

    • JavaSwing其他组件

    • JavaSwing相关特性

      • 组件的位置和尺寸
      • 组件边框(Border)
      • 事件处理
      • 多线程并发与线程安全
      • 拖拽功能
      • 闪屏(SplashScreen)
      • 系统托盘(SystemTray)
    • 扩展:JavaAWTSwing其他相关

  • java基础

  • javaweb

  • 框架

  • Maven
  • 单元测试
  • 动态代理
  • 数据库

  • netty

  • 设计模式

  • 微服务及架构

  • 云原生

  • Velocity模板引擎
  • 后端
  • Swing专题
  • JavaSwing相关特性
wuzhiyong
2024-09-18

组件的位置和尺寸

# 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

组件坐标和宽高的最终确定,和其所在父容器的布局管理器有关(除此之外还和其他因素有关)。布局管理器布局时对于某些需要子组件撑满指定边界的布局管理器(例如 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

结果展示:

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

← JInternalFrame(内部窗口) 组件边框(Border)→

Copyright © 2020-2025 wuzhiyong
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式