1

私はGroovyについて少し知っています:

  • 構文をより簡潔にするいくつかの方法
  • Java 匿名内部クラスを置き換える際にクロージャーがどのように役立つか。
  • ビルダーがツリーの構築を容易にする方法

以上のことから、Groovy SwingBuilder が Java での設定よりはるかに優れていることが明らかになると思いました。しかし、私が本や Web で見た例は、私が期待する Java バージョンよりも簡潔で読みやすいようには見えません。

Groovy Swing が際立っている Java と Groovy の良い例を、実際のまたは不自然な例で示すことができますか?

4

2 に答える 2

3

光りませんでした。単純に多くのコードを節約できます。不満を言うことはできますが、私が見た限りでは、そのようなテーブルの作成は、別個のモデル クラスや、メソッド宣言や注釈などの不要な行がたくさんあるよりも優れています。

table = builder.table(constraints: BorderLayout.CENTER) {
  tableModel(list: data) {
    propertyColumn(header:'Name', propertyName: 'displayName', editable: false)
    closureColumn(header:'Value', read: IDENTITY,
    cellRenderer: cellRenderer, cellEditor: cellEditor,
    write: {row, newVal->});
} }

簡単なテーブル作成と非常に強力なclosureColumnに加えて、読みやすい簡単な例があります:

new SwingBuilder().frame(pack: true, show: true, defaultCloseOperation: JFrame.EXIT_ON_CLOSE) {
    panel(layout: new BorderLayout()) {
       label constraints: BorderLayout.PAGE_START, "Header"
       button constraints: BorderLayout.PAGE_END,
           action: action(name: "Footer", closure: { println "Footer pressed" }, accelerator: "Ctrl+K" )
       list listData: 1..10, BorderLayout.CENTER 
}   }

それでは、答えてください。そのような結果を得るには、何行のコードを記述しますか?

編集: Groovy 非 SwingBuilder コードの 2 番目の例を追加しました。

def panel = new JPanel(new BorderLayout())
panel.add(new JLabel("Header"), BorderLayout.PAGE_START)
panel.add(new JList(*(1..10)), BorderLayout.CENTER)

def button = new JButton(new AbstractAction("Footer") {
    {
        putValue(ACCELERATOR_KEY, "Ctrl+K");
    }
    @Override void actionPerformed(ActionEvent actionEvent) {
        println "Footer pressed"
    }
})
panel.add(button, BorderLayout.PAGE_END)

def frame = new JFrame()
frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
frame.contentPane = panel
frame.pack()
frame.visible = true
于 2013-12-27T21:44:13.590 に答える