【Java】Graphicsオブジェクトで角丸の長方形を描画する方法を解説
JavaでGUIアプリケーションに図形を描画したい場合、Graphicsオブジェクトを使うのが基本となります。この記事では、Graphicsオブジェクトの基礎知識と、drawRoundRect()メソッドを使って角丸の長方形(ラウンドレクト)を描画する具体的な手順を、サンプルコード付きで解説します。
Graphicsクラスとは
- Javaにおける描画処理は、java.awt.GraphicsクラスのインスタンスであるGraphicsオブジェクトを通じて行われます。
- 各Graphicsオブジェクトは独自の座標系を持ち、文字列・線・矩形・円・多角形など、さまざまな図形を描画するためのメソッドを備えています。
- Graphicsオブジェクトには、コンポーネントのpaint(Graphics g)メソッドをオーバーライドすることでアクセスできます。
- 角丸の長方形を描画するには、X座標・Y座標・幅・高さ・arcWidth(角の横幅)・arcHeight(角の高さ)の6つの引数を受け取るdrawRoundRect()メソッドを使用します。
drawRoundRect()メソッドの引数
- x / y: 長方形の左上隅の座標
- width / height: 長方形の幅と高さ
- arcWidth: 四隅の角の丸みの水平方向の直径
- arcHeight: 四隅の角の丸みの垂直方向の直径
なお、塗りつぶしのある角丸の長方形を描きたい場合は、同じ引数を持つfillRoundRect()メソッドを使用します。
サンプルコード
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RoundedRectangleTest extends JFrame {
public RoundedRectangleTest() {
setTitle("RoundedRectangle Test");
setSize(350, 275);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawRoundRect(10, 50, 150, 150, 50, 30); // 角丸の長方形を描画する
}
public static void main(String[] args) {
new RoundedRectangleTest();
}
}
コードのポイント
- paint()メソッド内で受け取ったGraphicsオブジェクトをGraphics2Dにキャストすると、より高度な描画機能が利用できます。
g2d.drawRoundRect(10, 50, 150, 150, 50, 30)により、位置(10, 50)に幅150×高さ150の角丸の長方形が描画されます。最後の2つの引数(50, 30)が角の丸みの大きさを決定します。
実行結果

このように、GraphicsオブジェクトのdrawRoundRect()メソッドを使えば、数行のコードで簡単に角丸の長方形を描画できます。arcWidthとarcHeightの値を調整することで、角の丸みを自由にコントロールできるので、ぜひいろいろな値を試してみてください。
-
Javaで角丸のJTextFieldを実装する方法を解説
はじめにJTextFieldはJTextComponentクラスのサブクラスであり、ユーザーが1行形式でテキスト値を入力できる、Swingの中でも最も重要なコンポーネントの一つです。JTextFieldクラスは、テキストフィールド内に入力を行おうとするとActionListenerインターフェースを生成します。主なメソッドには、setText()、getText()、setEnabled()などがあります。デフォルトでは、JTextFieldは四角形の形状を持っていますが、RoundRectangle2Dクラスを使用し、paintComponent()メソッドをオーバーライドすることで、角丸形
-
JavaのBorderFactoryを使ってさまざまなボーダー(境界線)を実装する方法
BorderFactoryは、Javaでさまざまな種類のボーダー(境界線)を生成するためのファクトリクラスです。このクラスを利用することで、Swingコンポーネントの外枠を簡単かつ柔軟にカスタマイズできます。ボーダーの種類BevelBorder:浮き上がった(RAISED)または沈み込んだ(LOWERED)斜めのエッジを描画します。ボタンなどに立体感を持たせたい場合に有効です。EmptyBorder:何も描画しませんが、余白としてスペースを確保します。コンポーネント間の間隔調整に役立ちます。EtchedBorder:LOWERED(沈み込み)タイプはくぼんだ矩形のような外観になり、RAISED