![]() | Background | サンプルソース |
|---|---|---|
背景に画像を敷き詰めるサンプル。ウィンドウをド派手に飾っちゃおう。 |
Background.java |
/**
* 愛のJava256本ノック for Java 5.0
* Javaサンプルソース ver0.2C "Background"
* Background.java 「ウインドウの背景に画像を敷き詰める」
*
* 2005/09/23 制作:安永ノリカズ
*
* 【コンパイル&実行方法】
* >javac Background.java
* >java Background
* 【キーワード】
* 背景(background)の塗りつぶし, BorderLayout, do whileループ,
* ImageIcon
* 【試してみよう】
* ボタン以外のコンポーネントを配置してみる。
* OKボタンを押すたびに背景の画像が変わるようにする。
* (imageフォルダに"dot.gif"という画像を用意してます)
*/
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.lang.String;
import java.lang.System;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Background extends JFrame {
public Background() {
JPanel L00 = new BgPanel();
L00.setLayout(new BorderLayout());
JPanel L01 = new JPanel();
L01.setOpaque(false);
L01.add(new JButton("OK"));
L00.add(L01, BorderLayout.SOUTH);
setContentPane(L00);
}
static public void main(String[] A00) {
Toolkit.getDefaultToolkit().setDynamicLayout(true);
System.setProperty("sun.awt.noerasebackground", "true");
JFrame L00 = new Background();
L00.setTitle("背景に画像を敷き詰めてます");
L00.setDefaultCloseOperation(EXIT_ON_CLOSE);
L00.setSize(320, 240);
L00.setVisible(true);
}
}
class BgPanel extends JPanel {
static final String C00 = "image/raster.gif";
Image I00;
int I01;
int I02;
public BgPanel() {
I00 = new ImageIcon(C00).getImage();
I01 = I00.getWidth(this);
I02 = I00.getHeight(this);
}
public void paintComponent(Graphics A00) {
if (I01 <= 0 || I02 <= 0) {
return;
}
int L00 = 0;
do {
int L01 = 0;
do {
A00.drawImage(I00, L00, L01, this);
L01 += I02;
} while (L01 < getHeight());
L00 += I01;
} while (L00 < getWidth());
}
}
/* ■ クラスの外でちょっと一言 ■
背景の画像はImageIconクラスを使って読み込んでます。このクラスのコンスト
ラクターは、メディアトラッカー(java.awt.MediaTracker)を使って、イメージ
が完全に読み込まれるまで待機してくれるので、便利ですね。ちなみに、画像
フォーマットはGIF、JPEG、PNGに対応してます。
システムプロパティを使って、背景の塗りつぶしを抑制してます。今後も永続的
に提供されることが保証されている機能ではありませんが、5.0でも引き続き提
供されたので、しばらくは使えそうな予感です。
ボタン用のパネルは、後ろに敷いた背景用パネルが見えるように、
setOpaque(false)で透明にしてますが、この"Opaque"は「不透明な」という意味
で、「オウペイク」と発音します。でも僕は、最初これを「オパキュー」と読ん
でしまい、以来ずっと、「オバキュー→オバケのQ太郎→透明」の連想で
「setOpaque(true)で透明だ!」という呪縛から逃れられずにいます。
ということで、Sun Microsystems様へ。ご多忙の折とは存じ上げますが、
JComponentに以下のようなメソッドを追加していただけると、僕はとっても幸せ
です。
public void setObaque(boolean isObaque) {
setOpaque(!isObaque);
}
*/