2010年10月22日
私的Swingメモ
- JFrameを継承したクラスを作成しそこにmainメソッドを定義する。主な初期処理はこのクラスのコンストラクタで行う。
public class BaseFrame extends JFrame { public static void main(String[] args) { BaseFrame base = new BaseFrame(); base.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); base.setVisible(true); } public BaseFrame() { // コンポーネントの作成・配置など。 } }
- JFrame.setDefaultCloseOperation() メソッドで「閉じる」を押したときの挙動を設定する。何もしてない状態だと「閉じる」を押してもウィンドウは閉じるがアプリケーションは終了しない(デフォルトは JFrame.EXIT_ON_CLOSE が良かったんじゃないだろうか…)。
- JFrame.setVisible() は実行するタイミングによって挙動が変わる場合がある…気がする(単に可視状態になるタイミングの問題だけでなくコンポーネントの配置が崩れたりする)。main()の最後に実行するのが安全そう。
- JEditorPaneなどではHTML+CSS形式の表示がサポートされているが、モダンな仕様に完全対応しているわけではない。HTMLは3.2準拠、CSSも一部プロパティーはサポートされていない。
- JEditorPaneをHTML形式で使うとデフォルトの行間がなぜかとても広くなっていて、line-heihtスタイルでの調整も効かないために使いづらい…(何か対応策はあるのかな?)
(2010/11/05追記:少なくともWindowsの場合は下記の方法で通常のフォントや行間にできることを確認。)
try { // WindowsのLook&Feelを使用 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { } JEditorPane editorPane = new JEditorPane(); editorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
- JLabelは1つのラベルにテキストと画像を同時に設定できたり、HTMLも使える何かと便利な子。
- (Swingに限った話ではないが)イベント処理でaddXXXListenerするときは無名クラスを使って実装するのが便利。またXXXListenerに定義されている全てのメソッドを実装する必要がないときはXXXXAdapterを継承させるとよい。
hoge.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // ここに処理を記述 } }); hoge.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { // ここに処理を記述 } // keyReleased()とkeyTyped()はいらない。 });
- JList(など)はデータとその表示を分離しつつ連動させることができる。表示をカスタマイズしたい場合は、ListCellRendererを実装したクラスを用意し、ListModelにそのインスタンスを追加していく。
// JLabelを表示させたい場合 public class CustomJLabel extends JLabel implements ListCellRenderer { @Override public Component getListCellRendererComponent( JList list, Object obj, int index, boolean isSelected, boolean hasFocus) { // thisに対して表示内容を設定 return this; } }
何かあれば適宜追加していく。
トラックバック - http://d.hatena.ne.jp/inamenai/20101022/p1
リンク元
- 30 http://twitter.com/
- 13 http://www.google.co.jp/
- 9 http://blog.inasphere.net/
- 6 http://blog.inasphere.net/2007/10/post_6.html
- 6 http://twitter.com/inamenai
- 4 http://d.hatena.ne.jp/babie/20110421/1303366810
- 4 http://search.yahoo.co.jp/search?p=inamenai&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 4 http://www.google.co.jp/search?q=jeditorpane+行間&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 3 http://twtr.jp/user/inamenai
- 3 http://twtr.jp/user/inamenai?guid=ON
