Java 응용 프로그램의 일부로 대화 상자를 만들고 있습니다. 그루비의 swingBuilder를 사용하고 있는데 JDialog를 팩하려고 할 때 약간의 어려움을 겪고 있습니다. 아래 코드를 참조하십시오 :GridLayout이 포함 된 JPanel로 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 콘솔에 붙여 넣으면 잘 실행되어야합니다. 'click me'버튼을 클릭하면 대화 상자 아래에 여분의 공간이 생깁니다.
레이블, 텍스트 필드 및 두 개의 버튼이있는 그리드 레이아웃입니다. 괜찮아 보이지만 대화 상자를 꾸리려고하면 문제가 생깁니다. 그것은 잘 포장하지만 바닥에 여분의 공간 (GridLayout에서 추가 행처럼)이 있습니다. 대화 상자가 이상하게 보입니다. 이 문제를 GridLayout으로 좁혔습니다. 구성 요소의 행을 하나만 추가하면 잘 포장되기 때문입니다. 격자를 완전히 제거하고 다른 임의의 구성 요소를 추가하면 잘 포장됩니다. 나는 대체 레이아웃 관리자를 시도 할 수 있지만 GridLayout은 GridBag와 같이 너무 많은 코드 없이는 잘 작동한다는 것을 알고있다. 그래서 다른 솔루션이 없다면 GridLayout을 고수 할 것입니다.
JDialog에서 setSize() 메서드를 사용하면 대화 상자의 크기가 조정되지만 다른 테마와 플랫폼에서도 잘 수행되지 않습니다. 나는 오히려 pack()을 사용하여 모든 플랫폼의 크기를 조정할 것입니다. 도움을 주셔서 미리 감사드립니다.
1) 더 빨리 도움을 받으려면 [SSCCE] (http://pscode.org/sscce.html)를 게시하십시오. 2) 귀하의 질문은 무엇입니까? 그것을 알아 내면 게시물로 편집하십시오. –
감사합니다. SSCCE에서 작동합니다. – Mark