1
我是一名Java開發人員,並且在Java中完成了GUI應用程序構建的公平份額。我對Groovy很陌生,坦率地說,我對這幾點感到困惑。使用Groovy SwingBuilder進行組件佈局時遇到問題
我的問題是,我有以下代碼。在組件放置的所有約束中,只有JButton.CENTER被授予。所有其他人都被簡單地忽略。除非我註釋掉bpanel的所有代碼,否則不會顯示頂部'apanel'。我嘗試了各種其他派生組件的放置和沒有工作 - 一些在運行時編譯和錯誤,一些完全沒有錯誤 - 像這些 - 但不榮幸。這是代碼。提前非常感謝您的幫助。另外,對於那些在Groovy中執行GUI工作的人,您是使用SwingBuilder,還是使用Java編寫代碼?
import java.awt.*
import javax.swing.*
import groovy.swing.SwingBuilder
import java.awt.BorderLayout as BL
name = "ATestGroovyGui"
builder = new SwingBuilder().edt {
frame(title: name, show: true, pack: true, defaultCloseOperation:JFrame.EXIT_ON_CLOSE) {
apanel = panel() {
gridLayout(cols: 2, rows: 2)
label(text: "These", horizontalTextPosition: JLabel.CENTER)
label(text: "are", horizontalTextPosition: JLabel.CENTER)
label(text: "four", horizontalTextPosition: JLabel.CENTER)
label(text: "labels", horizontalTextPosition: JLabel.CENTER)
constraints: BL.CENTER
}
bpanel = panel() {
borderLayout()
alabel = label(text: "alabel",
horizontalTextPosition: JLabel.CENTER,
constraints: BorderLayout.WEST)
abutton = button(text: "abutton",
actionPerformed: { alabel.text = "changed" },
horizontalTextPosition: JButton.CENTER,
constraints: BorderLayout.EAST)
constraints: BL.SOUTH
println name + " button hit"
}
}
}
沒有爲你的'frame'分配一個佈局''bpanel'基本上位於'apanel'之上,這就是你看不到它的原因。 – hsan
hsan,非常感謝您的回覆。我確實解決了這個問題,儘管我沒有看到我的頭頂是如何做到的。我在上面做了,並且從那以後,爲BL.CENTER和BL.SOUTH設置了約束條件。我能看到的唯一差別就是我做到這一點。現在它是:'builder.panel(constraints:BorderLayout.CENTER)'...並且對於SOUTH又是一樣的。建設者當然是一個新的SwingBuilder。 –