• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JFrameのタイトルバーなどを独自のものにカスタマイズする
#navi(../)
RIGHT:Posted by [[terai]] at 2010-01-18
*JFrameのタイトルバーなどを独自のものにカスタマイズする [#f6fbf6c0]
JFrameのタイトルバーなどを非表示にして独自に描画し、移動リサイズなどの機能も追加します。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#da76e44b]
#code{{
class ResizeWindowListener extends MouseAdapter {
  private Rectangle startSide = null;
  private final JFrame frame;
  public ResizeWindowListener(JFrame frame) {
    this.frame = frame;
  }
  public void mousePressed(MouseEvent e) {
    startSide = frame.getBounds();
  }
  public void mouseDragged(MouseEvent e) {
    if(startSide==null) return;
    Component c = e.getComponent();
    if(c==topleft) {
      startSide.y += e.getY();
      startSide.height -= e.getY();
      startSide.x += e.getX();
      startSide.width -= e.getX();
    }else if(c==top) {
      startSide.y += e.getY();
      startSide.height -= e.getY();
    }else if(c==topright) {
      startSide.y += e.getY();
      startSide.height -= e.getY();
      startSide.width += e.getX();
    }else if(c==left) {
      startSide.x += e.getX();
      startSide.width -= e.getX();
    }else if(c==right) {
      startSide.width += e.getX();
    }else if(c==bottomleft) {
      startSide.height += e.getY();
      startSide.x += e.getX();
      startSide.width -= e.getX();
    }else if(c==bottom) {
      startSide.height += e.getY();
    }else if(c==bottomright) {
      startSide.height += e.getY();
      startSide.width += e.getX();
    }
    frame.setBounds(startSide);
  }
}
}}

**解説 [#dd2ca04c]
上記のサンプルではタイトルバーを、setUndecorated(true)で非表示にし、移動可能にしたJPanelを追加してタイトルバーにしています。
リサイズは、[[Swing - Undecorated and resizable dialog>http://forums.sun.com/thread.jspa?threadID=5254456]]やBasicInternalFrameUI.javaなどを参考にして、周辺にそれぞれ対応するリサイズカーソルを設定したJLabelを配置しています。
----
JDK 1.7.0 の場合、JFrameの背景色を透明(frame.setBackground(new Color(0,0,0,0)))にし、ContentPaneの左右上の角をクリアして透明にしています。

**参考リンク [#p98cd47e]
-[[Swing - Undecorated and resizable dialog>http://forums.sun.com/thread.jspa?threadID=5254456]]

**コメント [#nc60542a]
#comment