Skip to content

Instantly share code, notes, and snippets.

@tkuenneth
Created December 31, 2020 13:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkuenneth/b13f5a710737873c15b8b22df24df91e to your computer and use it in GitHub Desktop.
Save tkuenneth/b13f5a710737873c15b8b22df24df91e to your computer and use it in GitHub Desktop.
A Java Swing window with a blinking title bar
package com.thomaskuenneth
import kotlinx.coroutines.*
import java.awt.*
import java.awt.event.*
import javax.swing.*
import javax.swing.UIManager.*
import javax.swing.plaf.*
import java.lang.System.*
fun main() {
GlobalScope.launch(Dispatchers.Main) {
// configure UIManager
setLookAndFeel(getCrossPlatformLookAndFeelClassName())
JFrame.setDefaultLookAndFeelDecorated(true)
// create and setup JFrame
JFrame("BlinkingTitleBarDemo").apply {
var lastTimer = 0L
addComponentListener(object : ComponentAdapter() {
override fun componentResized(e: ComponentEvent?) {
lastTimer = currentTimeMillis()
}
override fun componentMoved(e: ComponentEvent?) {
lastTimer = currentTimeMillis()
}
})
contentPane.add(JLabel("Hello Kotlin!", SwingConstants.CENTER).apply {
font = font.deriveFont(72f)
}, BorderLayout.CENTER)
defaultCloseOperation = JFrame.EXIT_ON_CLOSE
size = Dimension(600, 200)
setLocationRelativeTo(null)
// let it blink
launch(Dispatchers.Main) {
var state = false
while (isActive) {
getDefaults()["activeCaption"] =
ColorUIResource(if (state) Color.lightGray else Color.blue)
getDefaults()["activeCaptionText"] =
ColorUIResource(if (state) Color.blue else Color.lightGray)
if (currentTimeMillis() - lastTimer >= 1000) {
SwingUtilities.updateComponentTreeUI(rootPane)
}
state = !state
delay(1000)
}
}
isVisible = true
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment