Sat, December 12, 2009
painter.jar 指定矩形範囲 文字列便利描画ライブラリ(Java2D)
文字を指定した範囲(矩形)に描画するライブラリ。
複数行の折り返しをサポートし、水平・垂直方向の整列指定が可能です。
- 水平方向では、右(right)・中央(center)・左(left)
- 垂直方向では、上(top)・中央(middle)・下(bottom)

このような処理は、 javax.swing.JLabel を使えば実現できます。
このライブラリの目的は、 javax.swing.JComponent の paintComponent() を使って 独自の描画を行う場合で、テキストの描画をコントロールする場合に 簡単にコーディングできるようにすることです。
Download
- painter.tar.gz
- License This software is released under LGPL.
使用方法
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);
}
}