我正在创建一个对话框作为 Java 应用程序的一部分。我正在使用 groovy 的 swingBuilder,在尝试打包 JDialog 时遇到了一些困难。请看下面的代码:
import groovy.swing.SwingBuilder
import javax.swing.*
swing = new SwingBuilder()
swing.edt{
frame(id: 'mainFrame', title: 'Test', size: [200,200], visible: true, locationRelativeTo: null, resizable: false){
panel{
button('Click me', actionPerformed: {createAssessmentCategoryDialog()})
}
}
}
public JPanel createAssessmentCategoryPanel(){
swing.panel(id: 'assessmentCategoryPanel'){
panel{
panel(layout: gridLayout(rows:2, cols:2, hgap:4, vgap:4)){
label("Category Name", horizontalAlignment: JLabel.RIGHT)
textField(id: 'categoryName', columns: 12)
button('Save & add another', actionPerformed:{saveAssessmentCategoryInfo()}).toolTipText = 'Saves and clears field'
button('Close', actionPerformed:{assessmentCategoryDialog.visible = false}).toolTipText = 'Closes dialog without saving'
}
}
}
return swing.assessmentCategoryPanel
}
public void createAssessmentCategoryDialog(){
assessmentCategoryDialog = new JDialog(swing.mainFrame, "Add Assessment Category", true)
assessmentCategoryDialog.resizable = false
assessmentCategoryDialog.defaultCloseOperation = JDialog.DISPOSE_ON_CLOSE
assessmentCategoryDialog.contentPane.add(createAssessmentCategoryPanel())
assessmentCategoryDialog.pack()
assessmentCategoryDialog.locationRelativeTo = swing.mainFrame
assessmentCategoryDialog.visible = true
}
如果您将此代码粘贴到 groovy 控制台中,它应该可以正常执行。单击“单击我”按钮后,请注意对话框下方的额外空间。
所以它是一个网格布局,有一个标签、文本字段和两个按钮。它显示得很好,但是当我尝试打包对话框时,我的麻烦就来了。它水平包装很好,但我在底部有一个额外的空间(几乎就像 GridLayout 的额外行)。它使对话框看起来很奇怪。我已将这个问题缩小到 GridLayout,因为如果我只添加一行组件,它就可以很好地打包。如果我完全移除网格并添加一些其他随机组件,它会很好地打包。我知道我可以尝试使用备用布局管理器,但 GridLayout 对我来说效果很好,不需要太多代码,比如 GridBag。因此,除非没有其他解决方案,否则我真的宁愿坚持使用 GridLayout。
如果我在 JDialog 上使用 setSize() 方法,对话框确实会调整大小,但是,在不同的主题和平台上,它的性能不会那么好。我更愿意使用 pack() 来调整任何平台的大小。提前感谢您的任何帮助。