标签:String title Kotlin param VB6 text owner MsgBox
VB6中的MsgBox
VB6 中有一个十分好用的过程MsgBox
MsgBox(Prompt, Button, Title,)
可以用来编写一些简单的对话框
Private Sub Command1_Click()
Dim x As Integer
x = MsgBox("你好", vbYesNo)
If x = VbMsgBoxResult.vbYes Then
MsgBox ("你点击了确定")
End If
End Sub
在Swing中,并没有这个函数,我们来模拟一个
/**
* @author Winterreisender
* @license Apache-2.0
*/
import java.awt.BorderLayout
import java.util.concurrent.Semaphore
import javax.swing.*
// 垃圾Java,连MsgBox都没有
object MsgBox {
/**
* MsgBox not like VB with callback
*
* 垃圾Java,连MsgBox都没有
*
* @author Winterreisender
* @param text The text to show in Dialog
* @param title The title of JDialog window
* @param owner The parent JFrame of Dialog
* @param yesText The text of "Yes" button
* @param noText The text of "No" button
* @param onYes callback when "Yes" clicked
* @param onNo callback when "No" clicked
* @return A showing JDialog with Yes and No button
*/
fun msgBoxAsync(
text: String,
title: String = "",
owner: JFrame? = null,
yesText: String = "确认",
noText: String? = null,
onYes: () -> Unit = {},
onNo: () -> Unit = {}
) = JDialog(owner, title).apply {
layout = BorderLayout()
defaultCloseOperation = WindowConstants.DISPOSE_ON_CLOSE
setLocationRelativeTo(owner)
JLabel(text, JLabel.CENTER)
.also { add(it, BorderLayout.CENTER) }
Box(BoxLayout.X_AXIS).apply {
Box.createHorizontalGlue().also(::add)
JButton(yesText).apply {
pack()
addActionListener {
onYes()
dispose()
}
}.also(::add)
if (noText != null) JButton(noText).apply {
pack()
addActionListener {
onNo()
dispose()
}
}.also(::add)
Box.createHorizontalGlue().also(::add)
pack()
isVisible = true
}.also { add(it, BorderLayout.SOUTH) }
}.apply { pack(); isVisible = true }
/**
* Synchronized MsgBox like VB
*
* 垃圾Java,连MsgBox都没有
*
* @author Winterreisender
* @param text The text to show in Dialog
* @param title The title of JDialog window
* @param owner The parent JFrame of Dialog
* @param yesText The text of "Yes" button
* @param noText The text of "No" button
* @return A showing JDialog with Yes and No button
*/
fun msgBox (
text: String,
title: String = "",
owner: JFrame? = null,
yesText: String = "确认",
noText: String = "取消"
) :Boolean {
var r: Boolean = false
val sem = Semaphore(0)
MsgBox.msgBoxAsync(text, title, owner, yesText, noText, { r = true;sem.release() }, { r = false; sem.release() })
sem.acquire()
return r
}
}
fun main() {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")
val r = MsgBox.msgBox("Text")
if(r) {
println("你点击了确定")
}
}
标签:String,title,Kotlin,param,VB6,text,owner,MsgBox 来源: https://www.cnblogs.com/winterreisender/p/15861583.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。