1
我有一個獨立的Swing應用程序,我使用Groovy作爲編程語言。CSSBuilder可以在沒有Griffon的情況下使用?
試圖使用CSS應用樣式併爲此尋找某種工具,我發現CSSBuilder。
問題是CSSBuilder與Griffon框架集成在一起,所以我不能使用它從Griffon中分離出來的所有功能,比如'cssClass'選擇器。
因此我的問題很簡單:有沒有人設法做到這樣的事情?
我有一個獨立的Swing應用程序,我使用Groovy作爲編程語言。CSSBuilder可以在沒有Griffon的情況下使用?
試圖使用CSS應用樣式併爲此尋找某種工具,我發現CSSBuilder。
問題是CSSBuilder與Griffon框架集成在一起,所以我不能使用它從Griffon中分離出來的所有功能,比如'cssClass'選擇器。
因此我的問題很簡單:有沒有人設法做到這樣的事情?
只是寫了一個快速測試,這似乎工作:
@GrabResolver(name='codehaus', root='http://repository.codehaus.org')
@Grab('org.codehaus.griffon:cssbuilder:0.4')
import griffon.builder.css.*
import groovy.swing.SwingBuilder
import java.awt.BorderLayout as BL
def style = '''* {
background-color: red;
}
jbutton {
background-color: blue;
}
.active {
color: green ;
font-size: 50%;
}
jlabel {
color: pink ;
font-size: 200% ;
}'''
Class klass = javax.swing.JComponent
if(!AbstractSyntheticMetaMethods.hasBeenEnhanced(klass)) {
AbstractSyntheticMetaMethods.enhance(klass,[
"getCssClass": {-> delegate.getClientProperty(ClarityConstants.CLIENT_PROPERTY_CLASS_KEY) },
"setCssClass": { String cssClass -> delegate.putClientProperty(ClarityConstants.CLIENT_PROPERTY_CLASS_KEY, cssClass) }
])
}
new SwingBuilder().edt {
int count = 0
def frame = frame(title:'CSS Test', size:[ 300, 300 ], show: true) {
borderLayout()
textlabel = label(text:"Click the button!", constraints: BL.NORTH)
button(text:'Click Me',
cssClass: 'active',
actionPerformed: {count++; textlabel.text = "Clicked ${count} time(s)."; println "clicked"},
constraints:BL.SOUTH)
}
CSSDecorator.applyStyle(style, frame)
}
元級增強的代碼,我從source of CSSBuilder
@trapiello更新答案了 –
謝謝,可以完美運行。 –