1

スタンドアロンの Swing アプリケーションがあり、Groovy をプログラミング言語として使用しています。

CSS を使用してスタイルを適用し、この目的のためのツールを検索しようとすると、CSSBuilderが見つかりました。

問題は、CSSBuilder が Griffon フレームワークに統合されているため、'cssClass' セレクターなど、Griffon から分離されたすべての機能を使用できないことです。

したがって、私の質問は単純です: 誰かがこのようなことをすることができましたか?

4

1 に答える 1

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 )
}

CSSBuilderのソースから取ったメタクラス拡張コード

于 2012-09-18T10:20:08.597 に答える