<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Kotlin Swing 教程 > 原文: [http://zetcode.com/kotlin/swing/](http://zetcode.com/kotlin/swing/) Kotlin Swing 教程展示了如何在 Kotlin 中創建 Swing GUI 應用。 代碼示例和圖像可從作者的 Github [Kotlin-Swing](https://github.com/janbodnar/Kotlin-Swing) 存儲庫中獲得。 Swing 是 Java 編程語言的主要 GUI 工具包。 它是 JFC(Java 基礎類)的一部分,JFC 是用于為 Java 程序提供圖形用戶界面的 API。 ## Kotlin Swing `JFrame` 在第一個示例中,我們在屏幕上顯示一個基本窗口。 使用`JFrame`創建主應用窗口。 `KotlinSwingSimpleEx.kt` ```kt package com.zetcode import java.awt.EventQueue import javax.swing.* class KotlinSwingSimpleEx(title: String) : JFrame() { init { createUI(title) } private fun createUI(title: String) { setTitle(title) defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) setLocationRelativeTo(null) } } private fun createAndShowGUI() { val frame = KotlinSwingSimpleEx("Simple") frame.isVisible = true } fun main(args: Array<String>) { EventQueue.invokeLater(::createAndShowGUI) } ``` 窗口位于屏幕中央。 ```kt class KotlinSwingSimpleEx(title: String) : JFrame() { ``` `KotlinSwingSimpleEx`繼承自`JFrame`組件。 `JFrame`是頂級容器。 容器的目的是保存應用的組件。 ```kt setTitle(title) ``` 應用的標題由`setTitle()`設置。 ```kt defaultCloseOperation = JFrame.EXIT_ON_CLOSE ``` `defaultCloseOperation`設置關閉框時默認發生的操作。 在我們的情況下,我們退出該應用。 ```kt setSize(300, 200) ``` 我們用`setSize()`設置初始大小。 ```kt setLocationRelativeTo(null) ``` 這條線用于使窗口在屏幕上居中。 ```kt val frame = KotlinSwingSimpleEx("Simple") frame.isVisible = true ``` 我們創建應用框架并將其顯示在屏幕上。 ```kt EventQueue.invokeLater(::createAndShowGUI) ``` `invokeLater()`方法將應用放置在 Swing 事件隊列中。 它用于確保所有 UI 更新都是并發安全的。 ![Simple example](https://img.kancloud.cn/a8/9f/a89ffd9df5c135361d0b4fe1738ded95_300x200.jpg) 圖:簡單 example ## Kotlin Swing `JButton` 在下一個示例中,我們有一個關閉按鈕。 使用`JButton`創建一個按鈕組件。 當我們單擊按鈕時,應用終止。 `KotlinSwingCloseButtonEx.kt` ```kt package com.zetcode import java.awt.EventQueue import javax.swing.* class KotlinSwingCloseButtonEx(title: String) : JFrame() { init { createUI(title) } private fun createUI(title: String) { setTitle(title) val closeBtn = JButton("Close") closeBtn.addActionListener { System.exit(0) } createLayout(closeBtn) defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) setLocationRelativeTo(null) } private fun createLayout(vararg arg: JComponent) { val gl = GroupLayout(contentPane) contentPane.layout = gl gl.autoCreateContainerGaps = true gl.setHorizontalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ) gl.setVerticalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ) pack() } } private fun createAndShowGUI() { val frame = KotlinSwingCloseButtonEx("Close button") frame.isVisible = true } fun main(args: Array<String>) { EventQueue.invokeLater(::createAndShowGUI) } ``` 我們將`JButton`放置在窗口上,然后向該按鈕添加一個動作監聽器。 ```kt val closeBtn = JButton("Close") ``` 創建一個按鈕組件。 構造器將字符串標簽作為參數。 ```kt closeBtn.addActionListener { System.exit(0) } ``` 使用`addActionListener()`將動作監聽器添加到按鈕。 該操作通過調用`System.exit()`方法來終止應用。 ```kt createLayout(closeBtn) ``` 子組件(在我們的情況下是一個按鈕)需要放入容器中。 我們將任務委托給`createLayout()`方法。 ```kt val gl = GroupLayout(contentPane) contentPane.layout = gl ``` `JFrame`的內容窗格是放置子組件的區域。 子級由專門的不可見組件(稱為布局管理器)組織。 `BorderLayout`是內容窗格的默認布局管理器。 該管理器非常簡單,僅在少數情況下有用。 我們使用功能更強大,更靈活的`GroupLayout`管理器。 ```kt gl.autoCreateContainerGaps = true ``` `autoCreateContainerGaps`屬性在組件和容器邊緣之間創建間隙。 空間或間隙是每個應用設計的重要組成部分。 ```kt gl.setHorizontalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ) gl.setVerticalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ) ``` `GroupLayout`管理器獨立定義每個大小的布局。 第一步,我們沿著水平軸布置組件; 在另一步驟中,我們沿垂直軸布置組件。 在兩種布局中,我們都可以順序或并行排列組件。 在水平布局中,一行組件稱為順序組,而一列組件稱為并行組。 在垂直布局中,一列組件稱為順序組,一排組件稱為并行組。 在我們的示例中,我們只有一個按鈕,因此布局非常簡單。 對于每個維度,我們以按鈕組件作為參數調用`addComponent()`方法。 (必須為兩個維度都添加每個子組件。) ![Close button](https://img.kancloud.cn/fc/44/fc4432c4438d7e83c975ef29ab65a2c7_300x200.jpg) 圖:關閉按鈕 ## Kotlin Swing `JLabel` `JLabel`組件用于顯示文本,顏色或圖像。 `KotlinSwingStandardColoursEx.kt` ```kt package com.zetcode import java.awt.Color import java.awt.Dimension import java.awt.EventQueue import javax.swing.GroupLayout import javax.swing.JFrame import javax.swing.JLabel import javax.swing.SwingConstants.LEADING class KotlinSwingStandardColoursEx(title: String) : JFrame() { init { createUI(title) } private fun createUI(title: String) { val stdCols = arrayOf<Color>(Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow) val labels = stdCols.map { JLabel("", null, LEADING).apply { minimumSize = Dimension(90, 40) background = it isOpaque = true } } createLayout(labels) setTitle(title) defaultCloseOperation = JFrame.EXIT_ON_CLOSE setLocationRelativeTo(null) } private fun createLayout(labels: List<JLabel>) { val gl = GroupLayout(contentPane) contentPane.layout = gl gl.autoCreateContainerGaps = true gl.autoCreateGaps = true gl.setHorizontalGroup(gl.createParallelGroup() .addGroup(gl.createSequentialGroup() .addComponent(labels[0]) .addComponent(labels[1]) .addComponent(labels[2]) .addComponent(labels[3])) .addGroup(gl.createSequentialGroup() .addComponent(labels[4]) .addComponent(labels[5]) .addComponent(labels[6]) .addComponent(labels[7])) .addGroup(gl.createSequentialGroup() .addComponent(labels[8]) .addComponent(labels[9]) .addComponent(labels[10]) .addComponent(labels[11])) .addComponent(labels[12]) ) gl.setVerticalGroup(gl.createSequentialGroup() .addGroup(gl.createParallelGroup() .addComponent(labels[0]) .addComponent(labels[1]) .addComponent(labels[2]) .addComponent(labels[3])) .addGroup(gl.createParallelGroup() .addComponent(labels[4]) .addComponent(labels[5]) .addComponent(labels[6]) .addComponent(labels[7])) .addGroup(gl.createParallelGroup() .addComponent(labels[8]) .addComponent(labels[9]) .addComponent(labels[10]) .addComponent(labels[11])) .addComponent(labels[12]) ) pack() } } private fun createAndShowGUI() { val frame = KotlinSwingStandardColoursEx("Standard colours") frame.isVisible = true } fun main(args: Array<String>) { EventQueue.invokeLater(::createAndShowGUI) } ``` 該示例顯示了 13 個`JLabel`組件; 每個標簽具有不同的背景色。 `JLabel`通常用于顯示文本; 但它也可以顯示顏色。 ```kt val stdCols = arrayOf<Color>(Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow) ``` 在這里,我們有一個內置顏色值的數組。 ```kt val labels = stdCols.map { JLabel("", null, LEADING).apply { minimumSize = Dimension(90, 40) background = it isOpaque = true } } ``` 標簽以一定的大小和背景色創建。 ![Standard colours](https://img.kancloud.cn/7d/ef/7def008e3510aace9f012e5e7c319903_404x227.jpg) 圖:標準顏色 ## `JCheckBox` `JCheckBox`是帶有標簽的框,該標簽具有兩種狀態:開和關。 如果選中此復選框,則在復選框中用勾號表示。 復選框可用于在啟動時顯示或隱藏啟動屏幕,切換工具欄的可見性等。 通過`JCheckBox`可以使用`ActionListener`或`ItemListener`。 通常使用后一種選項。 `ItemListener`是用于接收項目事件的接口。 對處理項目事件感興趣的類,例如觀察者,實現此接口。 使用組件的`addItemListener()`方法向組件注冊觀察者對象。 發生項目選擇事件時,將調用觀察者的`itemStateChanged()`方法。 `KotlinSwingCheckBoxEx.kt` ```kt package com.zetcode import java.awt.EventQueue import java.awt.event.ItemEvent import javax.swing.GroupLayout import javax.swing.JCheckBox import javax.swing.JComponent import javax.swing.JFrame class KotlinSwingCheckBoxEx(title: String) : JFrame() { init { createUI(title) } private fun createUI(title: String) { setTitle(title) val checkBox = JCheckBox("Show title", true) checkBox.addItemListener { e -> val sel: Int = e.stateChange if (sel == ItemEvent.SELECTED) { setTitle("JCheckBox") } else { setTitle("") } } createLayout(checkBox) defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) setLocationRelativeTo(null) } private fun createLayout(vararg arg: JComponent) { val gl = GroupLayout(contentPane) contentPane.layout = gl gl.autoCreateContainerGaps = true gl.setHorizontalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ) gl.setVerticalGroup(gl.createSequentialGroup() .addComponent(arg[0]) ) pack() } } private fun createAndShowGUI() { val frame = KotlinSwingCheckBoxEx("JCheckBox") frame.isVisible = true } fun main(args: Array<String>) { EventQueue.invokeLater(::createAndShowGUI) } ``` 我們的代碼示例根據是否選中復選框來顯示或隱藏窗口的標題。 ```kt val checkBox = JCheckBox("Show title", true) ``` `JCheckBox`已創建。 此構造器將文本和復選框的狀態作為參數。 最初已選中該復選框。 ```kt checkBox.addItemListener { e -> val sel: Int = e.stateChange if (sel == ItemEvent.SELECTED) { setTitle("JCheckBox") } else { setTitle("") } } ``` 項目監聽器隨`addItemListener()`添加。 根據復選框的狀態,我們顯示或隱藏窗口標題。 ![JCheckBox](https://img.kancloud.cn/0f/6d/0f6d5b333cb1acf088d9251e1f61d758_300x200.jpg) 圖:`JCheckBox` ## Kotlin Swing 圖標 在下一個示例中,我們在`JLabel`組件中顯示圖標。 `KotlinSwingLabelIconEx.kt` ```kt package com.zetcode import javax.swing.* class KotlinSwingLabelIconEx(title: String) : JFrame() { init { createUI(title) } private fun createUI(title: String) { val lbl1 = JLabel(ImageIcon("src/main/resources/cpu.png")) val lbl2 = JLabel(ImageIcon("src/main/resources/drive.png")) val lbl3 = JLabel(ImageIcon("src/main/resources/laptop.png")) val lbl4 = JLabel(ImageIcon("src/main/resources/player.png")) createLayout(lbl1, lbl2, lbl3, lbl4) setTitle(title) defaultCloseOperation = JFrame.EXIT_ON_CLOSE setLocationRelativeTo(null) } private fun createLayout(vararg arg: JComponent) { val gl = GroupLayout(contentPane) contentPane.layout = gl gl.autoCreateContainerGaps = true gl.autoCreateGaps = true gl.setHorizontalGroup(gl.createSequentialGroup() .addComponent(arg[0]) .addComponent(arg[1]) .addComponent(arg[2]) .addComponent(arg[3]) ) gl.setVerticalGroup(gl.createParallelGroup() .addComponent(arg[0]) .addComponent(arg[1]) .addComponent(arg[2]) .addComponent(arg[3]) ) pack() } } private fun createAndShowGUI() { val frame = KotlinSwingLabelIconEx("Icons") frame.isVisible = true } fun main(args: Array<String>) { SwingUtilities.invokeLater(::createAndShowGUI) } ``` 該示例在一行中顯示了四個圖像。 ```kt val lbl1 = JLabel(ImageIcon("src/main/resources/cpu.png")) ``` 圖像路徑被傳遞到`ImageIcon`。 ![ImageIcon](https://img.kancloud.cn/e1/b4/e1b459c1bec2e1946fd42a7114b2917b_236x97.jpg) 圖:圖像Icon ## Kotlin Swing 菜單示例 `JMenuBar`實現菜單欄。 `JMenu`實現菜單,該菜單是包含`JMenuItems`的彈出窗口,當用戶在`JMenuBar`上選擇一個項目時顯示。 `JMenuItem`實現菜單中的項目。 用戶選擇它來執行操作。 `KotlinSwingSimpleMenuExEx.kt` ```kt package com.zetcode import java.awt.EventQueue import java.awt.event.ActionEvent import java.awt.event.KeyEvent import javax.swing.* class KotlinSwingSimpleMenuExEx(title: String) : JFrame() { init { createUI(title) } private fun createUI(title: String) { setTitle(title) createMenuBar() defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) setLocationRelativeTo(null) } private fun createMenuBar() { val menubar = JMenuBar() val icon = ImageIcon("src/main/resources/exit.png") val file = JMenu("File") file.mnemonic = KeyEvent.VK_F val eMenuItem = JMenuItem("Exit", icon) eMenuItem.mnemonic = KeyEvent.VK_E eMenuItem.toolTipText = "Exit application" eMenuItem.addActionListener { _: ActionEvent -> System.exit(0) } file.add(eMenuItem) menubar.add(file) jMenuBar = menubar } } private fun createAndShowGUI() { val frame = KotlinSwingSimpleMenuExEx("Simple menu") frame.isVisible = true } fun main(args: Array<String>) { EventQueue.invokeLater(::createAndShowGUI) } ``` 該示例創建一個帶有一個菜單項的簡單菜單。 選擇退出菜單項,我們關閉應用。 ```kt val menubar = JMenuBar() ``` 使用`JMenuBar`創建菜單欄。 ```kt val icon = ImageIcon("src/main/resources/exit.png") ``` 菜單中顯示退出圖標。 ```kt val file = JMenu("File") file.mnemonic = KeyEvent.VK_F ``` 使用`JMenu`類創建菜單對象。 也可以通過鍵盤訪問菜單。 要將菜單綁定到特定鍵,我們使用`setMnemonic()`方法。 在我們的情況下,可以使用`Alt + F + E` 打開菜單。 ```kt eMenuItem.toolTipText = "Exit application" ``` 此代碼行為菜單項創建工具提示。 ```kt eMenuItem.addActionListener { _: ActionEvent -> System.exit(0) } ``` `JMenuItem`是一種特殊的按鈕組件。 我們向它添加一個動作監聽器; 選擇后將終止應用。 ```kt file.add(eMenuItem) menubar.add(file) ``` 菜單項被添加到菜單對象,菜單對象被插入菜單欄。 ```kt jMenuBar = menubar ``` 菜單欄設置為`JFrame`的`jMenubar`屬性。 ![Simple menu](https://img.kancloud.cn/2c/00/2c006b2b13a1807e48f19b30b2482a3b_300x200.jpg) 圖:簡單菜單 在本教程中,我們介紹了使用 Kotlin 語言的 Swings 工具包。 您可能也對相關教程感興趣: [Kotlin Hello World 教程](/kotlin/helloworld/), [Kotlin 控制流](/kotlin/controlflow/), [Kotlin 讀取文件教程](/kotlin/readfile/)和 [Kotlin 寫入文件教程](/kotlin/writefile/) 。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看