概要

JFrameのタイトルバーなどを非表示にし、Windowの形を非矩形図形に変更します。

サンプルコード

JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.setAlwaysOnTop(true);
frame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
frame.getContentPane().add(label);
frame.getContentPane().setBackground(Color.GREEN);
frame.pack();

String str = textField.getText().trim();
TextLayout tl = new TextLayout(str, font, frc);
Rectangle2D b = tl.getBounds();
Shape shape = tl.getOutline(AffineTransform.getTranslateInstance(-b.getX(), -b.getY()));

frame.setBounds(shape.getBounds());
// JDK 1.6.0: com.sun.awt.AWTUtilities.setWindowShape(frame, shape);
frame.setShape(shape);
frame.setLocationRelativeTo(parent);
frame.setVisible(true);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JDK 1.7.0で導入されたWindow#setShape(Shape)メソッドを使用してJFrameの形を変更しています。

  • JDK 1.6.0_10の場合はcom.sun.awt.AWTUtilities.setWindowShape(...)を使用する

参考リンク

コメント