Index > ボーダー(border)の自作
Fri, November 28, 2008

ボーダー(border)の自作

javax.swing.border パッケージには、 あらかじめ便利なボーダーがいろいろと揃っています。

通常は、javax.swing.BorderFactoryを通じて各種ボーダーのインスタンスを取得して使いますが。

それらSwing標準のボーダー、およびその組み合わせで間に合わない場合は、自作します。

今回は、ツールバーとメインパネルの間に引くボーダーを 実現する UnderlineBorder.java を作成しました。

完成イメージ

2つのボタンの下に引かれている線が UnderlineBorderクラスで実現されています。 今回は、EtchedBorderに似せて線を描画しました。

UnderlineBorder.java

パネルの下(bottom)部分だけボーダーを引く 自作のボーダークラスです。

javax.swing.border.Borderインタフェースを実装し、 あとは、paintBorderメソッド内で、ボーダーの描画を行います。

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;

import javax.swing.border.Border;


public class UnderlineBorder implements Border{


    private Insets insets=new Insets(0,0,10,0);
    public Insets getBorderInsets(Component arg0) {
        return insets;
    }
    public boolean isBorderOpaque() {
        return true;
    }

    public void paintBorder (Component c, Graphics g,int x, int y, int width, int height){


        Insets insets=getBorderInsets(c);

        Color keepC=g.getColor();
        {
            int x1=x;
            int y1=y+height-insets.bottom/2;

            int x2=x+width;
            int y2=y1;


            {
                g.setColor(Color.LIGHT_GRAY);
                g.drawLine(x1,y1,x2,y2);
            }
        }

        {
            int x1=x;
            int y1=y+height-(insets.bottom/2)+1;

            int x2=x+width;
            int y2=y1;


            {
                g.setColor(Color.WHITE);
                g.drawLine(x1,y1,x2,y2);
            }
        }

        g.setColor(keepC);
    }

}

TestPanel.java

UnderlineBorderを試すためのテストクラス。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TestPanel extends JPanel{

    public TestPanel() {
        super();

        setLayout(new BorderLayout());

        JPanel toolBar=new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));
        {
            toolBar.setBorder(new UnderlineBorder());

            JButton button1=new JButton("button1");
            JButton button2=new JButton("button2");

            toolBar.add(button1);
            toolBar.add(button2);
        }

        add(toolBar,BorderLayout.NORTH);
    }

    public Insets getInsets() {
        return new Insets(10,10,10,10);
    }

    public static void main(String[] args){

        JFrame f=new JFrame();
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setSize(400,300);
        f.getContentPane().add(new TestPanel());
        f.setVisible(true);


    }

}
 Twitter
follow me on Twitter
 Categories