Swing/ScrollingMessage の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ScrollingMessage へ行く。
- Swing/ScrollingMessage の差分を削除
--- category: swing folder: ScrollingMessage title: GlyphVectorで文字列を電光掲示板風にスクロール tags: [GlyphVector, LineMetrics, TextLayout, Animation, JComponent] author: aterai pubdate: 2006-11-13T04:01:26+09:00 description: GlyphVectorを生成して、これを電光掲示板のようにスクロールさせます。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTSlbxO22I/AAAAAAAAAjA/SJLXTaAYArY/s800/ScrollingMessage.png --- * 概要 [#summary] `GlyphVector`を生成して、これを電光掲示板のようにスクロールさせます。 #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTSlbxO22I/AAAAAAAAAjA/SJLXTaAYArY/s800/ScrollingMessage.png) * サンプルコード [#sourcecode] #code(link){{ class MarqueePanel extends JComponent implements ActionListener { public final javax.swing.Timer animator; private final GlyphVector gv; private float xx, yy; public MarqueePanel() { super(); animator = new javax.swing.Timer(10, this); String text = "asffdfaaAAASFDsfasdfsdfasdfasd"; Font font = new Font(Font.SERIF, Font.PLAIN, 100); FontRenderContext frc = new FontRenderContext(null, true, true); gv = font.createGlyphVector(frc, text); LineMetrics lm = font.getLineMetrics(text, frc); yy = lm.getAscent() / 2f + (float) gv.getVisualBounds().getY(); } @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; int cw = getWidth(); int ch = getHeight(); g2.setPaint(Color.WHITE); g2.draw(new Line2D.Float(0, ch / 2f, cw, ch / 2f)); g2.setPaint(Color.BLACK); g2.drawGlyphVector(gv, cw - xx, ch / 2f - yy); xx = (cw + gv.getVisualBounds().getWidth() - xx > 0) ? xx + 2f : 0f; } @Override public void actionPerformed(ActionEvent e) { repaint(); } } }} * 解説 [#explanation] 上記のサンプルでは、`GlyphVector`や`LineMetrics`からテキストの`VisualBounds`や`Ascent`を取得して文字列を描画する位置などを計算しています。 ---- - 以下のように`TextLayout`を使用する方法もある #code{{ TextLayout tl = new TextLayout(text, font, frc); Rectangle2D b = tl.getBounds(); yy = tl.getAscent() / 2f + (float) b.getY(); }} * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/font/GlyphVector.html GlyphVector (Java Platform SE 8)] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/font/TextLayout.html TextLayout (Java Platform SE 8)] * コメント [#comment] #comment #comment