[[oktatas:programozás:kotlin|< Kotlin]] ====== Kotlin Swing ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2020 * [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: http://szit.hu ===== Helló világ ===== import javax.swing.* fun main() { val ablak = JFrame("Helló Világ") ablak.setSize(300, 200) ablak.setVisible(true) } ===== Ablak bezárása ===== import javax.swing.* fun main() { val ablak = JFrame("Helló Világ") ablak.setSize(300, 200) ablak.defaultCloseOperation=JFrame.EXIT_ON_CLOSE ablak.setVisible(true) } ===== Gomb ===== import javax.swing.* import java.awt.* fun main() { val ablak = JFrame("Helló Világ") val gomb = JButton("Kattints ide") gomb.bounds = Rectangle(20, 50, 130, 30) gomb.addActionListener { gomb.text = "Működik" } ablak.add(gomb) ablak.layout=null ablak.setSize(300, 200) ablak.defaultCloseOperation=JFrame.EXIT_ON_CLOSE ablak.setVisible(true) } ===== Osztály használata ===== import javax.swing.*; import java.awt.EventQueue; class Ablak : JFrame() { init { defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) } } fun main() { val ablak = Ablak() ablak.setVisible(true) } ===== Szálak ===== Ha több szállal dolgozunk, akkor problémák adódhatnak, amikor több szál nyúl ugyanahhoz a komponenshez. Az invokeLate() metódus, várakozási sorba rakja az ezeket a szálakat. import javax.swing.*; class Ablak : JFrame() { init { defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) } } fun main() { val ablak = Ablak() SwingUtilities.invokeLater { ablak.setVisible(true) } } Másik megoldás: import javax.swing.*; import java.awt.EventQueue; class Ablak : JFrame() { init { defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) } } fun main() { val ablak = Ablak() EventQueue.invokeLater { ablak.setVisible(true) } } Harmadik példa: import javax.swing.*; import java.awt.EventQueue; class Ablak : JFrame() { init { defaultCloseOperation = JFrame.EXIT_ON_CLOSE setSize(300, 200) } } private fun showGui() { val ablak = Ablak() ablak.setVisible(true) } fun main() { EventQueue.invokeLater(::showGui) }