Javaで角丸のJTextFieldを実装する方法を解説
はじめに
JTextFieldはJTextComponentクラスのサブクラスであり、ユーザーが1行形式でテキスト値を入力できる、Swingの中でも最も重要なコンポーネントの一つです。JTextFieldクラスは、テキストフィールド内に入力を行おうとするとActionListenerインターフェースを生成します。主なメソッドには、setText()、getText()、setEnabled()などがあります。
デフォルトでは、JTextFieldは四角形の形状を持っていますが、RoundRectangle2Dクラスを使用し、paintComponent()メソッドをオーバーライドすることで、角丸形状(ラウンドシェイプ)のJTextFieldを実装することも可能です。
実装例
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class RoundedJTextFieldTest extends JFrame {
private JTextField tf;
public RoundedJTextFieldTest() {
setTitle("RoundedJTextField Test");
setLayout(new BorderLayout());
tf = new RoundedJTextField(15);
add(tf, BorderLayout.NORTH);
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
new RoundedJTextFieldTest();
}
}
// 角丸のJTextFieldを実装するクラス
class RoundedJTextField extends JTextField {
private Shape shape;
public RoundedJTextField(int size) {
super(size);
setOpaque(false);
}
protected void paintComponent(Graphics g) {
g.setColor(getBackground());
g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15);
super.paintComponent(g);
}
protected void paintBorder(Graphics g) {
g.setColor(getForeground());
g.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15);
}
public boolean contains(int x, int y) {
if (shape == null || !shape.getBounds().equals(getBounds())) {
shape = new RoundRectangle2D.Float(0, 0, getWidth()-1, getHeight()-1, 15, 15);
}
return shape.contains(x, y);
}
}コードのポイント
- setOpaque(false): 背景を透過させることで、独自に描画した角丸の背景が正しく表示されるようにしています。
- paintComponent()メソッド:
fillRoundRect()を使用して角丸の背景を描画し、その後スーパークラスの描画処理を呼び出します。 - paintBorder()メソッド:
drawRoundRect()を使用して角丸の境界線を描画します。 - contains()メソッド: RoundRectangle2D.Floatオブジェクトを用いてマウスクリックなどの判定範囲を角丸の形状に一致させます。これにより、四隅の角の部分がクリック対象外になります。
実行結果
上記のコードを実行すると、以下のように角丸の形状を持つテキストフィールドが画面上部に表示されます。

-
JavaでJTextFieldに数値のみ入力できるようにする方法
JTextFieldの入力制限とはデフォルトのJTextFieldは、数値・文字・特殊文字など、あらゆる種類の入力を受け付けることができます。しかし、ユーザーがJTextFieldに入力した内容を検証するのは意外と難しく、特にintなどの数値型へ変換する必要がある場合は注意が必要です。本記事では、JTextFieldに数値のみ入力できるように制限する方法を、具体的なサンプルコードとともに解説します。実装のポイントキー入力を監視するためにKeyListener(KeyAdapter)を使用し、押されたキーの文字が「0」から「9」の範囲内であるかどうかを判定します。数値であれば編集を許可し、それ以
-
JavaのJWindowを使ってスプラッシュ画面を実装する方法
JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ