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コンソールに貼り付けると、正常に実行されるはずです。[クリックしてください]ボタンをクリックした後、ダイアログの下の余分なスペースに注意してください。
つまり、ラベル、textField、および2つのボタンを持つグリッドレイアウトです。正常に表示されますが、ダイアログをパックしようとすると問題が発生します。水平方向にうまくパックされますが、下部に余分なスペース(GridLayoutの余分な行のようなもの)があります。ダイアログが奇妙に見えるようになります。この問題をGridLayoutに絞り込みました。これは、コンポーネントの行を1つだけ追加すると、問題なくパックされるためです。グリッドを完全に削除し、他のランダムなコンポーネントを追加すると、正常にパックされます。別のレイアウトマネージャーを試すことができることはわかっていますが、GridBagのように、コードが多すぎなくてもGridLayoutはうまく機能します。したがって、他に解決策がない場合を除いて、私は実際にはGridLayoutに固執したいと思います。
JDialogでsetSize()メソッドを使用すると、ダイアログのサイズが変更されますが、テーマやプラットフォームが異なると、パフォーマンスが低下します。プラットフォームのサイズを調整するには、pack()を使用したいと思います。よろしくお願いします。