[[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)
}