Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #31907

Re: Image rotation part 2

Newsgroups comp.lang.java.programmer
Date 2015-07-01 06:06 -0700
References <mmuhle$gp1$1@dont-email.me> <mmv7cc$l2$1@dont-email.me>
Message-ID <31e57656-27e3-46a4-abbd-a793c463adba@googlegroups.com> (permalink)
Subject Re: Image rotation part 2
From e.d.programmer@gmail.com

Show all headers | View raw


On Tuesday, June 30, 2015 at 7:07:21 PM UTC-4, Jeff Higgins wrote:
> On 06/30/2015 12:55 PM, Martin Gregorie wrote:
> 
> Not real pretty but...
> <http://www.rgagnon.com/javadetails/java-0259.html>
> 
> package scratch;
> 
> import javax.swing.*;
> import java.awt.*;
> import java.awt.geom.AffineTransform;
> 
> public class DrawVerticalText extends JPanel {
>      @Override
>      public void paint(Graphics g) {
>          Graphics2D g2 = (Graphics2D) g;
>          String s = "Vertical text";
>          int x=10;
>          int y=10;
>          int v;
> 
>          v=g.getFontMetrics(getFont()).getHeight()+1;
>          System.out.println(v);
>          int j =0;
>          int k= s.length();
>          while(j < k+1) {
>            if (j == k)
>               g.drawString(s.substring(j),x, y+(j*v));
>            else
>               g.drawString(s.substring(j,j+1),x, y+(j*v));
>            j++;
>            }
>          }
> 
> 
>      public static void main(String[] args) {
>          JFrame frame = new JFrame();
>          frame.setTitle("Draw Vertical Text Demo");
>          frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
>          frame.add(new DrawVerticalText());
>          frame.pack();
>          frame.setSize(200, 300);
>          frame.setVisible(true);
>      }
> }

That doesn't look pretty, though it's using my default font, which is "family=Dialog,name=Dialog,style=plain,size=12".
It doesn't seem to matter in testing your code as is but you should be overriding paintComponent not paint.  That does look prettier if we set a fixed width font.

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class TestRotatedText extends JPanel {

     @Override
     public void paintComponent(final Graphics g) {
          final Graphics2D g2 = (Graphics2D) g;
          final String s = "Vertical text";
          final int x = 10;
          final int y = 10;
          int v;
          g2.setFont(new Font("Lucida Sans TypeWriter", Font.PLAIN, 12));
          v = g2.getFontMetrics(g2.getFont()).getHeight() + 1;

          int j = 0;
          final int k = s.length();
          while (j < k + 1) {
               if (j == k) {
                    g2.drawString(s.substring(j), x, y + (j * v));
               } else {
                    g2.drawString(s.substring(j, j + 1), x, y + (j * v));
               }
               j++;
          }
     }

     public static void main(final String[] args) {
          final JFrame frame = new JFrame();
          frame.setTitle("Draw Vertical Text Demo");
          frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
          frame.add(new TestRotatedText());
          frame.pack();
          frame.setSize(200, 300);
          frame.setVisible(true);
     }
}

It is prettier if you can just turn it.

import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class TestRotatedText extends JPanel {

     @Override
     public void paintComponent(final Graphics g) {
          final Graphics2D g2 = (Graphics2D) g;
          final String s = "Vertical text";
          int charHeight;
          g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
          g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
          g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
          g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
          g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
          g2.setFont(new Font("Lucida Sans TypeWriter", Font.PLAIN, 12));
          final Font theFont = g2.getFont();
          final FontMetrics fm = g2.getFontMetrics(theFont);
          charHeight = fm.getHeight();
          // Create a rotation transformation for the font.
          final AffineTransform fontAT = new AffineTransform();
          fontAT.rotate(-Math.PI / 2.0);
          final Font theDerivedFont = theFont.deriveFont(fontAT);
          // set the derived font in the Graphics2D context
          g2.setFont(theDerivedFont);
          g2.drawString(s, charHeight, fm.stringWidth(s) + 5);
     }

     public static void main(final String[] args) {
          final JFrame frame = new JFrame();
          frame.setTitle("Draw Vertical Text Demo");
          frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
          frame.add(new TestRotatedText());
          frame.pack();
          frame.setSize(200, 300);
          frame.setVisible(true);
     }
}

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 16:55 +0000
  Re: Image rotation part 2 Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-06-30 14:03 -0400
    Re: Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 20:04 +0000
      Re: Image rotation part 2 Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-06-30 16:20 -0400
        Re: Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 20:52 +0000
  Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-06-30 12:07 -0700
  Re: Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 20:18 +0000
  Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-06-30 19:04 -0400
    Re: Image rotation part 2 Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-06-30 16:36 -0700
      Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-06-30 20:17 -0400
    Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-06-30 20:09 -0400
    Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-07-01 06:06 -0700
      Re: Image rotation part 2 FredK <fred.l.kleinschmidt@gmail.com> - 2015-07-01 10:57 -0700
      Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-07-01 18:13 -0400
      Re: Image rotation part 2 Arne Vajhøj <arne@vajhoej.dk> - 2015-07-27 22:28 -0400
        Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-07-28 04:58 -0700
          Re: Image rotation part 2 Arne Vajhøj <arne@vajhoej.dk> - 2015-07-28 18:58 -0400
            Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-07-29 05:35 -0700

csiph-web