//////////////////// Main.java //////////////////// class Main { public static void main(String args[]) { new MainWindow(); } } //////////////////////////////////////////////////////////// //////////////////// MainWindow.java //////////////////// import java.awt.*; import java.awt.event.*; class MainWindow extends Frame { public MainWindow() { super("BasicStroke Test"); MyCanvas canvas = new MyCanvas(); add(canvas, BorderLayout.CENTER); WindowListener w_listener = new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }; addWindowListener(w_listener); pack(); show(); } } //////////////////////////////////////////////////////////// //////////////////// MyCanvas.java //////////////////// import java.awt.*; class MyCanvas extends Canvas { private final Dimension default_size = new Dimension(256, 256); public MyCanvas() { setSize(default_size); } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; // 点線のパターン float[] dash_array = {15.0f, 4.0f, 2.0f, 4.0f}; // 線の太さ float line_width = 1.5f; // 線種の選択とGraphics2Dへの設定 BasicStroke bs = new BasicStroke(line_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL, 0f, dash_array, 0f); g2d.setStroke(bs); // 点線の描画 g2d.drawLine(0, 127, 255, 127); g2d.drawRect(0, 0, 255, 255); g.drawOval(0, 0, 255, 255); } } ////////////////////////////////////////////////////////////Source is here. (ZIP Format, 1052Byte, Shift-JIS)
float[] dash_array = {15.0f, 4.0f, 2.0f, 4.0f};の意味するところは、 15pixel描いて、4pixel描かずに進んで、2pixel描いて、4pixel描かずに進んで、 配列の元に戻って、15pixel描いて...ということを意味しています。 つまり、破線のパターンを表しています。 今回のサンプルでは、切り取り線のような点線を描いていますが、 普通の点線を描画することも可能です。 例えば、float[] dash_array = {3.0f, 3.0f}; のように宣言すれば、等間隔の点線を描くことが出来ます。線種の選択とGraphics2Dへの設定
実は、いまいち意味分かってません(^^; ということで、細かい設定必要な人は、マニュアルをちゃんと読みましょう。