2

私は Groovy パーティー (他のほとんどのパーティーと同様) には少し遅れており、オンラインで見つけることができたドキュメントSwingBuilderはやや限られています。Groovy でゲーム アプリケーションを構築しようとしています (現在の Java コードを Groovy に変換します)。Java には、ラベル、テキスト フィールド、ボタン、および GUI の構築に使用できるその他すべての楽しいスイング アイテムを含む JFrame複数の があります。JPanel

これらすべてのコードは、変数ごとに宣言する必要があり、面倒な場合があります。JButtonそのJPanelため、SwingBuilder数日前に groovy を発見したときは当然のことながら、私は有頂天になりました。

ただし、例は多少限定されています。だからここに私の初期コードがあります。

def Game(){
    mainMenu = new MainMenuPanel()
    gPane = new SwingBuilder()
    gPane.edt{
        frame(size:[1024,768],
            defaultCloseOperation: JFrame.EXIT_ON_CLOSE, location:[75,50], show:true, pack:false){
            container(container:mainMenu){}
            widget(mainMenu)
            }
        }
    }
    mainMenu.shell.show()
}

MainMenuPanel私はこのコードを持っています

class MainMenuPanel extends JPanel implements ActionListener, KeyListener, ItemListener { 
    public shell
shell = new SwingBuilder()
    shell.panel(id: "mainM",/*size:[512, 354],
    shell.edt{frame(show:true){panel(size:[512, 354],
            layout: new GridLayout(cols:1, rows: 7),*/
            visible:true, constraints: BL.NORTH){

            textLabel = label(text: "Welcome Travelers", horizontalAlignment: 0)
            speak = button(CreateButton("Say Hello", 83), 
                actionPerformed:{ shell.optionPane(message: "Hello World").createDialog(null, "Hello").show()})
            }
        }

groovy スクリプトを実行するJFrameと、何も入っていない , が表示されます。このコードのさまざまな組み合わせを試しましたが、2 つのフレームが表示されることがありますが、互いにネストされていません。ほとんどの場合、何も得られません。

私がやろうとしていることの目的は、MainMenuそのパネルを制御する機能を持つメニュー パネルを返すクラスと、他のさまざまなことを行い、それらすべてをペインにネストするパネルを返すさまざまな他のクラスを持つことです。

これを行うことは可能ですか?ここで何か不足していますか?

4

1 に答える 1

1

これは、上記のものと機能的に似ていると思います。

import groovy.swing.SwingBuilder

def mainMenu = { builder ->
  builder.panel( id:'mainM' ) {
    label( text: 'Welcome Travelers' )
    button( text: 'Say Hello', actionPerformed:{
      builder.optionPane( message:'Hello World' )
             .createDialog( null, 'Hello' )
             .show()
    } )
  }
}

new SwingBuilder().with { builder ->
  builder.edt {
    frame( size:[ 1024, 768 ], show:true ) {
      panel()
      mainMenu( builder )
    }
  }
}

それが役に立てば幸い?

于 2012-10-09T12:19:15.403 に答える