top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
基準となるシンプルな Swingフレーム (JFrame) サンプルを作成しました。
SimpleSwingFrame.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SimpleSwingFrame extends JPanel {
public SimpleSwingFrame() {
// 背景色を白色にします。
setBackground(Color.white);
}
public void paintComponent(final Graphics argGraphics) {
super.paintComponent(argGraphics);
// 赤色で画面の大きさいっぱいに円を描画します。
argGraphics.setColor(Color.red);
final Rectangle rect = getBounds();
argGraphics.drawOval(0, 0, rect.width, rect.height);
}
public static void main(final String[] args) {
// JFrameを作成して自分自身を貼り付け、これを表示します。
final JFrame frame = new JFrame("シンプルなSwingフレームサンプル");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new SimpleSwingFrame());
frame.setLocationRelativeTo(null);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
2007.01.21追記 渡辺義則さんから下記のツッコミがありました。
チョット気になるところがあったのでメールします。
getClipBounds()はウィンドウの矩形ではなく、描画する矩形が返されます。
ウィンドウが半分隠れている場合は、その部分は含まれません。なので、このプログラムを実行し、別のウィンドウで部分的に隠してやると描画が乱れます。
こうすればよいでしょう。 //final Rectangle rect = argGraphics.getClipBounds(); ←ココ☆ final Rectangle rect = getBounds();
ではでは。
ここからいがぴょん
ツッコミ ありがとうございます。感謝の気持ちでいっぱいです。ご指摘の通りです。さっそく修正しました。