第16夜 カスタムボーダを簡単にセットする
また久々にこのタグつかうわぁ。
今回はカスタムボーダの簡単な使い方。
まず、カスタムボーダとしてHogeBorderがあったとする。
こいつをプロジェクトのツリーからファイルをドラッグしてコントロールに貼り付ける。
プレビュー表示。ちゃんとテキストフィールドになっているのがわかると思う。
ちなみにボーダクラスのソースはこんな感じ。JTextFieldとJPanelだけ対応。opaqueプロパティには対応していないが、簡単なのでその場合自分で考えて見ましょう。
import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.RenderingHints; import javax.swing.border.AbstractBorder; public class HogeBorder extends AbstractBorder{ Insets insets = new Insets(16, 8, 8, 6); @Override public Insets getBorderInsets(Component c) { return insets; } public Insets getInsets() { return insets; } @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); Graphics top = g2.create(x, y, width, insets.top); top.setColor(c.getParent().getBackground()); top.fillRect(0, 0, width, insets.top); top.setColor(c.getBackground()); top.fillRoundRect(0, insets.top-insets.bottom, width, insets.top*2-1, 16, 16); top.dispose(); Graphics bottom = g2.create(x, y+height-insets.bottom, width, insets.bottom); bottom.setColor(c.getParent().getBackground()); bottom.fillRect(0, 0, width, insets.top); bottom.setColor(c.getBackground()); bottom.fillRoundRect(0, -insets.bottom, width-1, insets.bottom*2-1, 16, 16); bottom.dispose(); //枠線を描画 g2.setColor(Color.RED); g2.setStroke(new BasicStroke(1.0f)); g2.drawRoundRect(x, y+insets.bottom, width-1, height-insets.bottom-1, 16, 16); //文字を表示 g2.setColor(Color.BLACK); g2.setFont(new Font(Font.MONOSPACED , Font.BOLD , 14)); g2.drawString("HOGE", x+insets.left, y+12); } }