
【初心者用】Swingについて勉強したのでまとめてみた 第二回
公開日: 2025/4/7
前回はSwingとはどういうものか、そしてボタンを押下したら小文字英字が大文字に変換される簡単な処理の作成を行いました。
今回はSwingに図形を描画する方法をまとめ、次の章でこれまでの応用としてボタンを押下するとSwingに図形を描画して最終的に絵を完成させる処理を作成していきます。
1. Swingに図形を描画する方法
それではコマンドプロンプトもしくはターミナルを開き、jshellをコマンド入力してjshellを起動します。
続いて、Swingのパッケージをインポートします。
次にSwingの画面を表示させるための処理を書いていきます。この処理は前回も説明しておりますので解説は割愛します。
変更点としては変数がfに変更され、ウィンドウの名称がdrawingになっている所のみです。
次にJLabelというコンポーネントを使用して変数を割り当て、そのラベルをウィンドウに配置します。
JLabelは静的で編集のできないコンポーネントを表します。
前回使用した入力スペースやボタンのコンポーネントではなく表示させるだけのコンポーネントです。
今回は新しくpack()というメソッドを使用していますが、このメソッドはラベルに合わせてウィンドウサイズを調整するメソッドになります。
この処理を実行すると下記画像のようになります。
画像1:pack()メソッドの処理後

それではこの章の目標である図形を描画していきます。
まず、画像を扱うクラスをインポートします。
次に、クラスのコンストラクタを作成して、それぞれ挿入する画像のサイズや種類を設定します。
BufferedImageクラスのコンストラクタにはそれぞれ画像の幅、高さ、種類が指定されます。
今回は下記の設定で実行します。
幅:600
高さ:400
種類:BufferedImage.TYPE_INT_RGB(BufferedImageを使用する際にTYPE_INT_RGBを使う。RGBカラーモデルで色を設定。)
次にJLabelのコンポーネントに先ほど設定した画像を表示させる処理を行います。
1つの処理を2行で処理を行っていますので下記のように1行で表示させることもできるので下記でご紹介しておきます。
それではこれまで設定した処理をSwingに表示させるために先ほど使用したpack()メソッドを使用して幅:600、高さ:400のサイズに合わせて表示させます。
これで下記画面のように表示されていると思いますが、表示された画面が黒であるのはデフォルトで表示されたピクセルが黒で埋められているからです。
つまりデフォルトが黒画面ということです。
そして、右側には先ほど設定したラベルが表示されています。
左右に表示されている理由としては、表示される順番に理由があり、画像とラベルの配置順番が逆になると表示方法も逆になります。
これはデフォルトでそのように配置される仕様になっています。
配置する場所はレイアウトマネージャーを使用して設定できます。
画像2:2つの要素のレイアウト

次に簡単な線や画像を描画してみます。
続いて、Swingのパッケージをインポートします。
import javax.swing.*
次にSwingの画面を表示させるための処理を書いていきます。この処理は前回も説明しておりますので解説は割愛します。
var f = new JFrame("drawing")
f.setVisible(true)
変更点としては変数がfに変更され、ウィンドウの名称がdrawingになっている所のみです。
次にJLabelというコンポーネントを使用して変数を割り当て、そのラベルをウィンドウに配置します。
var label = new JLabel("test")
f.add(label)
f.pack()
JLabelは静的で編集のできないコンポーネントを表します。
前回使用した入力スペースやボタンのコンポーネントではなく表示させるだけのコンポーネントです。
今回は新しくpack()というメソッドを使用していますが、このメソッドはラベルに合わせてウィンドウサイズを調整するメソッドになります。
この処理を実行すると下記画像のようになります。
画像1:pack()メソッドの処理後

それではこの章の目標である図形を描画していきます。
まず、画像を扱うクラスをインポートします。
import java.awt.image.BufferedImage
次に、クラスのコンストラクタを作成して、それぞれ挿入する画像のサイズや種類を設定します。
var image = new BufferedImage(600,400,BufferedImage.TYPE_INT_RGB)
BufferedImageクラスのコンストラクタにはそれぞれ画像の幅、高さ、種類が指定されます。
今回は下記の設定で実行します。
幅:600
高さ:400
種類:BufferedImage.TYPE_INT_RGB(BufferedImageを使用する際にTYPE_INT_RGBを使う。RGBカラーモデルで色を設定。)
次にJLabelのコンポーネントに先ほど設定した画像を表示させる処理を行います。
var icon = new ImageIcon(image)
label.setIcon(icon)
1つの処理を2行で処理を行っていますので下記のように1行で表示させることもできるので下記でご紹介しておきます。
label.setIcon(new ImageIcon(image))
それではこれまで設定した処理をSwingに表示させるために先ほど使用したpack()メソッドを使用して幅:600、高さ:400のサイズに合わせて表示させます。
f.pack()
これで下記画面のように表示されていると思いますが、表示された画面が黒であるのはデフォルトで表示されたピクセルが黒で埋められているからです。
つまりデフォルトが黒画面ということです。
そして、右側には先ほど設定したラベルが表示されています。
左右に表示されている理由としては、表示される順番に理由があり、画像とラベルの配置順番が逆になると表示方法も逆になります。
これはデフォルトでそのように配置される仕様になっています。
配置する場所はレイアウトマネージャーを使用して設定できます。
画像2:2つの要素のレイアウト

次に簡単な線や画像を描画してみます。
var g = image.createGraphi
2. 応用プログラム
この章では処理を応用してボタンを押したら簡単な図形を描画できるシステムを作成してみます。
処理の内容としては、追加ボタンを押下すると、図形が描画され、削除ボタンを押下すると図形が削除される処理を行います。
下記が作成したコードになります。
今回は、コマンドプロンプトやターミナルで作成するものになります。
今回作成したコード はコピペしても作成可能です。
コピペする前に「JShell」にアクセスしておいてください。
下の画像が表示されていれば処理の完了です。
画像5:追加ボタン押下

画像6:削除ボタン押下

処理の内容としては、追加ボタンを押下すると、図形が描画され、削除ボタンを押下すると図形が削除される処理を行います。
下記が作成したコードになります。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
var apm = new JFrame("anpanman");
apm.setVisible(true);
apm.setSize(1200, 800);
var bp = new JPanel();
var b1 = new JButton("追加");
var b2 = new JButton("削除");
bp.add(b1);
bp.add(b2);
apm.add(bp, BorderLayout.SOUTH);
bp.setBackground(Color.gray) ;
apm.validate();
var gui = new BufferedImage(1200, 700, BufferedImage.TYPE_INT_RGB);
var label = new JLabel();
label.setIcon(new ImageIcon(gui));
apm.add(label);
var g = gui.createGraphics();
b1.addActionListener(e -> {
var g2 = gui.createGraphics();
g2.fillRect(250, 250, 600, 400);
label.repaint();
});
b2.addActionListener(e -> {
var g2 = gui.createGraphics();
g2.clearRect(250, 250, 600, 400);
label.repaint();
});
apm.pack();
今回は、コマンドプロンプトやターミナルで作成するものになります。
今回作成したコード はコピペしても作成可能です。
コピペする前に「JShell」にアクセスしておいてください。
下の画像が表示されていれば処理の完了です。
画像5:追加ボタン押下

画像6:削除ボタン押下

3. まとめ
第一回、第二回とSwingについて勉強したことをまとめました。
1行ごとに処理を確認でき、htmlのように状態を確認できるのでJava初心者には勉強しやすいツールだと思います。
電卓を作成できたりまだまだ複雑な処理を作成することも可能なので、時間がある時に作ってみてはいかがでしょうか。
最後まで読んでいただきありがとうございます。