吴志勇的博客 吴志勇的博客
  • 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其他组件

      • JFrame(窗口)
      • JDialog、JOptionPane(对话框)
      • JFileChooser(文件选择器)
      • JColorChooser(颜色选择器)
      • JMenuBar(菜单栏)
      • JToolBar(工具栏)
      • JPopupMenu(弹出菜单)
      • JTable(表格)
      • JTree(树)
      • JInternalFrame(内部窗口)
    • JavaSwing相关特性

    • 扩展:JavaAWTSwing其他相关

  • java基础

  • javaweb

  • 框架

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

  • netty

  • 设计模式

  • 微服务及架构

  • 云原生

  • Velocity模板引擎
  • 后端
  • Swing专题
  • JavaSwing其他组件
wuzhiyong
2024-09-18

JInternalFrame(内部窗口)

# 1. 概述

官方JavaDocsApi: javax.swing.JInternalFrame (opens new window)

JInternalFrame,内部窗口。

JInternalFrame 支持在 JFrame 窗口内部显示一个完整的子窗口,并提供了许多本机窗体功能的轻量级对象,包括拖动、关闭、变成图标、调整大小、标题显示和支持菜单栏等。

在实际使用中,通常将 JInternalFrame 添加到 JDesktopPane 中,由其来维护和显示 JInternalFrame。

JInternalFrame 的实例创建后,其具体使用方法和 JFrame 类似。

# 2. 代码实例

package com.xiets.swing;

import javax.swing.*;
import java.beans.PropertyVetoException;

public class Main {

    public static void main(String[] args) {
        JFrame jf = new JFrame("测试窗口");
        jf.setSize(400, 400);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        // 创建 桌面面板
        JDesktopPane desktopPane = new JDesktopPane();

        // 创建 内部窗口
        JInternalFrame internalFrame = createInternalFrame();

        // 添加 内部窗口 到 桌面面板
        desktopPane.add(internalFrame);

        // 把 桌面面板 作为 内容面板 设置到窗口并显示
        jf.setContentPane(desktopPane);
        jf.setVisible(true);

        try {
            // 设置 内部窗口 被选中
            internalFrame.setSelected(true);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }

    private static JInternalFrame createInternalFrame() {
        // 创建一个内部窗口
        JInternalFrame internalFrame = new JInternalFrame(
                "内部窗口",  // title
                true,       // resizable
                true,       // closable
                true,       // maximizable
                true        // iconifiable
        );

        // 设置窗口的宽高
        internalFrame.setSize(200, 200);
        // 设置窗口的显示位置
        internalFrame.setLocation(50, 50);
        // 内部窗口的关闭按钮动作默认就是销毁窗口,所有不用设置
        // internalFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        // 创建内容面板
        JPanel panel = new JPanel();

        // 添加组件到面板
        panel.add(new JLabel("Label001"));
        panel.add(new JButton("JButton001"));

        // 设置内部窗口的内容面板
        internalFrame.setContentPane(panel);

        /*
         * 对于内部窗口,还可以不需要手动设置内容面板,直接把窗口当做普通面板使用,
         * 即直接设置布局,然后通过 add 添加组件,如下代码:
         *     internalFrame.setLayout(new FlowLayout());
         *     internalFrame.add(new JLabel("Label001"));
         *     internalFrame.add(new JButton("JButton001"));
         */

        // 显示内部窗口
        internalFrame.setVisible(true);

        return internalFrame;
    }

}
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

结果展示:

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

← JTree(树) 组件的位置和尺寸→

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