Index > painter.jar 指定矩形範囲 文字列便利描画ライブラリ(Java2D)
Sat, December 12, 2009

painter.jar 指定矩形範囲 文字列便利描画ライブラリ(Java2D)

文字を指定した範囲(矩形)に描画するライブラリ。
複数行の折り返しをサポートし、水平・垂直方向の整列指定が可能です。

このような処理は、 javax.swing.JLabel を使えば実現できます。
このライブラリの目的は、 javax.swing.JComponent の paintComponent() を使って 独自の描画を行う場合で、テキストの描画をコントロールする場合に 簡単にコーディングできるようにすることです。

Download

使用方法

painter.tar.gzをダウンロードして、展開後 ...

$ tar xfz painter.tar.gz
$ cd painter
$ ant                          ... painter.jar が生成
$ ant docs                     ... javadoc生成
$ ant test                     ... サンプル作動

painter.jar の使い方例

painter.tar.gz に含まれる TestFrame.java をご覧ください。

package painter;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;

import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestFrame extends JFrame{

    static final String TEXT =
        "じゅげむじゅげむごこうのすりきれ、" + 
        System.getProperty("line.separator") + 
        "かいじゃりすいぎょのすいぎょうまつ";

    public TestFrame() {


        JPanel p=new JPanel(new GridLayout(3,3,10,10));
        p.setBackground(Color.WHITE);
        p.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

        // first row
        {
            int vta=TextPainter.TOP;

            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.LEFT);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.CENTER);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.RIGHT);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
        }

        // sencond row
        {
            int vta=TextPainter.MIDDLE;

            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.LEFT);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.CENTER);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.RIGHT);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
        }
        // third row
        {
            int vta=TextPainter.BOTTOM;

            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.LEFT);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.CENTER);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
            {
                MultiLineLabel l=createLabel();
                l.setHorizontalAlignment(TextPainter.RIGHT);
                l.setVerticalAlignment(vta);
                p.add(l);
            }
        }



        getContentPane().add(p,BorderLayout.CENTER);

    }
    private MultiLineLabel createLabel(){
        MultiLineLabel l=new MultiLineLabel();
        l.setFont( createDefaultFont(10) );
        l.setText(TEXT);
        l.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        return l;
    }
    private static Font createDefaultFont(int fontSize){
        return new Font("Dialog",Font.PLAIN,fontSize);
    }

    public static void main(String[] s){
        JFrame f=new TestFrame();
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        f.setSize(500,400);
        f.setVisible(true);

    }
}
 Twitter
follow me on Twitter
 Categories