CSSBuilder 可以在没有 Griffon 的情况下使用吗?

标签 css swing groovy griffon

我有一个独立的 Swing 应用程序,我使用 Groovy 作为编程语言。

尝试使用 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 中获取的元类增强代码

关于CSSBuilder 可以在没有 Griffon 的情况下使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12474821/

相关文章:

http - Groovy 中的 Mule HTTP 监听器查询?

css - 正文背景渐变的宽度不总是与 div 的边距匹配是有原因的吗

jquery - 最简单的脚本像砌 block

java - 如何在 Java Swing 中创建二维 SplitPane

groovy - 如果我也使用 Java 7,我应该使用 Groovy 的 @CompileStatic

groovy - 在多个settings.gradle中重用代码

javascript - 以编程方式在固定持续时间内应用 CSS 过渡

c# - 使用 JavaScript/jQuery 访问 CSS 属性

java - 按钮大小改变时字体大小改变

java - 如何滚动两个 JTextPane?