No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

猫にもわかるSwingBuilder「frame」

このシリーズの一覧はこちら

はじめに

自分のSwing力の無さに愕然としたので、ちょこちょこサンプルを作ってはまとめてゆく。故にちょこちょこ記事は加筆修正されてゆく予定です。
まず何はともあれframeを作らないと始まらないですよね、ということでframeからスタート。

クラス階層

javax.swing
Class JFrame

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame


JFrame (Java Platform SE 6)

frmaeの実体は javax.swing.JFrame となります。

ドキュメント

SwingBuilder.frame

属性一覧(よく使うもの抜粋)

id
id: 'mainFrame'

変数名を宣言。

size
size: [300, 300]

フレームのサイズをx, yで指定(px)。

location
location: [50, 50]

フレームの初期表示位置をx, yで指定(px)。画面左上からのピクセル(px)で指定。(デフォルトでは [0, 0] のようです)

locationByPlatform
locationByPlatform: true

location指定がない場合で、true に指定されているとプラットフォームに依存した初期表示位置になるようです。ちなみに、locationも指定し、locationByPlatformもtrueにすると、java.awt.IllegalComponentStateException: The window is showing on screen. というエラーが出るので注意。
(デフォルトでは false のようです)

show
show: true

非推奨のためvisibleを使いましょう。

visible
visible: true

フレームの表示非表示を指定。属性でtrueにしておくと、実行と同時に表示される感じになる。

resizable
resizable: true

フレームをリサイズできるかどうかを指定する。(デフォルトでは true のようです)

pack
pack: true

フレームのサブコンポーネントから推奨サイズを計算してぴったりぴっちりなサイズに設定する。フレームが非表示の際は設定されないらしい。(デフォルトでは false のようです)

defaultCloseOperation
defaultCloseOperation: WindowConstants.DISPOSE_ON_CLOSE

閉じるボタン押下時のデフォルト動作を指定。

サンプルソース

(動作確認: Groovy-Eclipse plugin Version: 2.5.1.xx-20110628-1600-e37)

frame1.groovy
import javax.swing.WindowConstants
import groovy.swing.SwingBuilder

class frame1 {
  static main(args) {
    new SwingBuilder().edt {
      frame(id        : 'mainFrame',
            title     : 'ふれーむ',
            size      : [300, 100],
            location  : [50, 50],
            visible   : true,
            resizable : true,
            defaultCloseOperation: WindowConstants.EXIT_ON_CLOSE)
    }
  }
}

解説

edtはEvent Dispatch Threadのことだと思う、多分。なんとなくサンプルでそう使っていたので今はまねしてそうしている。

実行結果イメージ

f:id:fumokmm:20110720014951p:image

更新履歴

2011-07-25
  • packを追加。
2011-07-20
  • id:kimukou_26さんのコメントより、location, locationByPlatform, resizable属性を追加。
  • クラス階層を追加。はてブコメントにてid:backpaper0さんに教えてもらった内容*1の反映。
2011-07-19
  • 新規作成。

*1:showはDeprected, visible推奨。