2013-10-04 39 views
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" 
     } 
    } 
} 
+0

沒有爲你的'frame'分配一個佈局''bpanel'基本上位於'apanel'之上,這就是你看不到它的原因。 – hsan

+0

hsan,非常感謝您的回覆。我確實解決了這個問題,儘管我沒有看到我的頭頂是如何做到的。我在上面做了,並且從那以後,爲BL.CENTER和BL.SOUTH設置了約束條件。我能看到的唯一差別就是我做到這一點。現在它是:'builder.panel(constraints:BorderLayout.CENTER)'...並且對於SOUTH又是一樣的。建設者當然是一個新的SwingBuilder。 –

回答