2012-09-18 41 views
1

我有一個獨立的Swing應用程序,我使用Groovy作爲編程語言。CSSBuilder可以在沒有Griffon的情況下使用?

試圖使用CSS應用樣式併爲此尋找某種工具,我發現CSSBuilder

問題是CSSBuilder與Griffon框架集成在一起,所以我不能使用它從Griffon中分離出來的所有功能,比如'cssClass'選擇器。

因此我的問題很簡單:有沒有人設法做到這樣的事情?

回答

2

只是寫了一個快速測試,這似乎工作:

@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

+0

@trapiello更新答案了 –

+0

謝謝,可以完美運行。 –

相關問題