Kotlin Swing 教程展示了如何在 Kotlin 中创建 Swing GUI 应用。 代码示例和图像可从作者的 Github Kotlin-Swing 存储库中获得。
Swing 是 Java 编程语言的主要 GUI 工具包。 它是 JFC(Java 基础类)的一部分,JFC 是用于为 Java 程序提供图形用户界面的 API。
Kotlin Swing JFrame
在第一个示例中,我们在屏幕上显示一个基本窗口。 使用JFrame
创建主应用窗口。
KotlinSwingSimpleEx.kt
窗口位于屏幕中央。
KotlinSwingSimpleEx
继承自JFrame
组件。 JFrame
是顶级容器。 容器的目的是保存应用的组件。
应用的标题由setTitle()
设置。
defaultCloseOperation
设置关闭框时默认发生的操作。 在我们的情况下,我们退出该应用。
我们用setSize()
设置初始大小。
这条线用于使窗口在屏幕上居中。
我们创建应用框架并将其显示在屏幕上。
invokeLater()
方法将应用放置在 Swing 事件队列中。 它用于确保所有 UI 更新都是并发安全的。
Figure: Simple example
Kotlin Swing JButton
在下一个示例中,我们有一个关闭按钮。 使用JButton
创建一个按钮组件。 当我们单击按钮时,应用终止。
KotlinSwingCloseButtonEx.kt
我们将JButton
放置在窗口上,然后向该按钮添加一个动作监听器。
创建一个按钮组件。 构造函数将字符串标签作为参数。
使用addActionListener()
将动作侦听器添加到按钮。 该操作通过调用System.exit()
方法来终止应用。
子组件(在我们的情况下是一个按钮)需要放入容器中。 我们将任务委托给createLayout()
方法。
JFrame
的内容窗格是放置子组件的区域。 子级由专门的不可见组件(称为布局管理器)组织。 BorderLayout
是内容窗格的默认布局管理器。 该管理器非常简单,仅在少数情况下有用。 我们使用功能更强大,更灵活的GroupLayout
管理器。
autoCreateContainerGaps
属性在组件和容器边缘之间创建间隙。 空间或间隙是每个应用设计的重要组成部分。
GroupLayout
管理器独立定义每个尺寸的布局。 第一步,我们沿着水平轴布置组件; 在另一步骤中,我们沿垂直轴布置组件。 在两种布局中,我们都可以顺序或并行排列组件。 在水平布局中,一行组件称为顺序组,而一列组件称为并行组。 在垂直布局中,一列组件称为顺序组,一排组件称为并行组。
在我们的示例中,我们只有一个按钮,因此布局非常简单。 对于每个维度,我们以按钮组件作为参数调用 addComponent()方法。 (必须为两个维度都添加每个子组件。)
Figure: Close button
Kotlin Swing JLabel
JLabel
组件用于显示文本,颜色或图像。
KotlinSwingStandardColoursEx.kt
该示例显示了 13 个JLabel
组件; 每个标签具有不同的背景色。 JLabel
通常用于显示文本; 但它也可以显示颜色。
在这里,我们有一个内置颜色值的数组。
标签以一定的大小和背景色创建。
Figure: Standard colours
JCheckBox
JCheckBox
是带有标签的框,该标签具有两种状态:开和关。 如果选中此复选框,则在复选框中用勾号表示。 复选框可用于在启动时显示或隐藏启动屏幕,切换工具栏的可见性等。
通过JCheckBox
可以使用ActionListener
或ItemListener
。 通常使用后一种选项。 ItemListener
是用于接收项目事件的界面。 对处理项目事件感兴趣的类,例如 观察者,实现此接口。 使用组件的addItemListener()
方法向组件注册观察者对象。 发生项目选择事件时,将调用观察者的itemStateChanged()
方法。
KotlinSwingCheckBoxEx.kt
我们的代码示例根据是否选中复选框来显示或隐藏窗口的标题。
JCheckBox
已创建。 此构造函数将文本和复选框的状态作为参数。 最初已选中该复选框。
项目侦听器随addItemListener()
添加。 根据复选框的状态,我们显示或隐藏窗口标题。
Figure: JCheckBox
Kotlin Swing 图标
在下一个示例中,我们在JLabel
组件中显示图标。
KotlinSwingLabelIconEx.kt
该示例在一行中显示了四个图像。
图像路径被传递到ImageIcon
。
Figure: ImageIcon
Kotlin Swing 菜单示例
JMenuBar
实现菜单栏。 JMenu
实现菜单,该菜单是包含JMenuItems
的弹出窗口,当用户在JMenuBar
上选择一个项目时显示。 JMenuItem
实现菜单中的项目。 用户选择它来执行操作。
KotlinSwingSimpleMenuExEx.kt
该示例创建一个带有一个菜单项的简单菜单。 选择退出菜单项,我们关闭应用。
使用 JMenuBar 创建菜单栏。
菜单中显示退出图标。
使用JMenu
类创建菜单对象。 也可以通过键盘访问菜单。 要将菜单绑定到特定键,我们使用setMnemonic()
方法。 在我们的情况下,可以使用Alt + F + E
打开菜单。
此代码行为菜单项创建工具提示。
JMenuItem
是一种特殊的按钮组件。 我们向它添加一个动作监听器; 选择后将终止应用。
菜单项被添加到菜单对象,菜单对象被插入菜单栏。
菜单栏设置为JFrame
的jMenubar
属性。
Figure: Simple menu