如何使用Groovy SwingBuilder创建JDesktopPane/JInternalFrame组合?
Groovy MDI应用完整实现方案
我帮你把这段代码补全并优化成可运行的Groovy MDI(多文档界面)应用,同时拆解下关键要点:
import groovy.swing.SwingBuilder import java.awt.BorderLayout as BL count = 0 new SwingBuilder().edt { frame(title: 'MDI主窗口', size: [600, 400], defaultCloseOperation: EXIT_ON_CLOSE, show: true) { // MDI核心容器:桌面面板 desktopPane() { // 内部窗口,配置标准交互属性 internalFrame(title: '第一个内部窗口', size: [300, 200], closable: true, maximizable: true, iconifiable: true, resizable: true, visible: true) { borderLayout() textlabel = label(text: '点击按钮计数!', constraints: BL.NORTH) button(text: '点我', constraints: BL.SOUTH, actionPerformed: { count++ textlabel.text = "已点击 ${count} 次!" }) } } } }
关键细节说明:
- MDI核心组件:
desktopPane()对应Swing的JDesktopPane,是所有内部窗口的容器,负责管理多文档界面的布局和窗口交互逻辑 - 内部窗口优化:给
internalFrame()添加了closable、maximizable等属性,让窗口具备标准的窗口操作能力;显式设置visible: true确保窗口默认显示 - 线程安全保障:用
edt方法包裹所有组件创建逻辑,确保Swing组件在事件调度线程(EDT)上初始化,避免线程安全问题 - 交互逻辑补全:完善了按钮的
actionPerformed闭包,实现点击计数并实时更新标签文本的功能
内容的提问来源于stack exchange,提问作者spierepf
相关产品推荐
相关产品推荐

