• ベストアンサー

Javaで文字の角度を変えて表示させたい。

JavaでdrawStringを使って文字を出力しますが、180度回転した文字 逆さ文字を表示させたいのですが、どのように記述すればよいのでしょうか? g.drawString("あ", 10,10); //あを逆さにしたい。 また、180度でなく、好みの角度の表示も可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • koki_m
  • ベストアンサー率83% (45/54)
回答No.1

こんにちは。文字などのグラフィックスを回転させる場合はjava.awt.Graphics2Dクラスが使えます。 他にも方法があるかもしれませんが、一例です。 BuffredImageを作成し、そこにGraphics2Dで描画、最後にコンポーネントへBuffredImageを描画しています。 ポイントは3.14で180度ということと、回転(rotate())させてからdrawString()というところです。 - - - - - - - - - - - - - - - - - - - - import java.awt.*; import java.awt.image.*; class RView extends Component { public RView() {super();} public void paint(Graphics g) { Dimension d; BufferedImage bi; Graphics2D g2; d = getSize(); bi = new BufferedImage(d.width, d.height, BufferedImage.TYPE_4BYTE_ABGR); g2 = bi.createGraphics(); g2.setColor(Color.blue); g2.fillRect(0, 0, d.width, d.height); // 回転 // 3.14=180度 // 200.0=横方向位置修正 // 150.0=縦方向位置修正 g2.rotate(3.14, 200.0, 150.0); g2.setColor(Color.yellow); g2.setFont(new Font("Serif", Font.BOLD, 24)); g2.drawString("Rotated String!!", 200, 150); g.drawImage(bi, 0, 0, Color.white, null); } }

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/Graphics2D.html
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルで文字の任意の角度に回転

    エクセルで、文字を任意の角度に回転させたいのですが、どうすればよいのでしょうか? 書式設定で、90度、180度には書いてできるのですが、45℃とかにはできません。 ワードアートなら任意の角度でできるのですが、普通の文字でやりたいです。 また、フローチャートに文字を書いて、回転させたのですが、図は回って、字は回りません。 お願いします。

  • javaの質問です。24フォントでg.drawString表示した文字

    javaの質問です。24フォントでg.drawString表示した文字に、8フォントのg.drawStringをy軸をいじり、ふりがなをつけたいのです。24フォントの文字の上に8フォントを表示するのだからx軸を3倍し、24フォントの半分の12を足せばいい(ふりがなが一文字の場合)とおもっていたのですが。24フォントの「あ*10」と8フォントの「あ*30」を表示し試したところ少しずつずれているようです。(以下のプログラムで試してみました)。x軸を揃え表示するためにはどうすればいいでしょうか import javax.swing.*; import java.awt.*; import java.awt.image.*; import java.util.*; public class MojiTest2 { JFrame frame1; BufferStrategy bstrategy; MojiTest2(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(800 + insets.left + insets.right,600 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); java.util.Timer t=new java.util.Timer(); t.schedule(new MyTimerTask(),2,15); } public static void main(String args[]){ MojiTest2 gtm =new MojiTest2(); } class MyTimerTask extends TimerTask{ int line = 0; int position = 0; String[] messages = { "あelloWorlハローワールド", "あいうあいうあいうあいうあいうあいうあいうあいうあい", "年収うううう万円の米市職員退職"}; @Override public void run() { Graphics g = bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ Insets insets = frame1.getInsets(); g.clearRect(insets.left,insets.top,insets.right - insets.left,insets.bottom - insets.top); g.translate(insets.left,insets.top); g.setColor(Color.BLUE); g.setFont(new Font("MS ゴシック",Font.BOLD,24)); g.drawString(messages[line].substring(0,position), 76,500 + 40 * line); g.drawString("ああああああああああああああああああああ", 76, 480); if((line==2) && (position==2)){ g.setFont(new Font("MS ゴシック",Font.BOLD,8)); g.drawString("ああああああああああああああああああああああああああああああ" + "ああああああああああああああああああああああああああああああ", 76, 460); }if(position < messages[line].length()){ position += 1; }else if(line == messages.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); } } }

    • ベストアンサー
    • Java
  • iアプリ、それともJava(?)における文字表示の挙動について

    iアプリ、それともJava(?)における文字表示の挙動について public void run(){  Graphics g = getGraphics();  while(true){   g.lock();   int i = 1;   g.drawString("hogehoge",0,15 + i); //下にずれて表示されていく。   g.unlock(true);   i++;  }//while() }//run() 【質問】 whileループで繰り返し、上記のような処理がなされる場合、 一度表示した文字は残らず、ループの繰り返し毎に、 何も表示されていない所に、1から表示しなおされる形で、 処理が行われています。 例えば、ループなしの簡単なHellow World!のような文字表示サンプルプログラムですと、 そのHellow World!という文字列を1度描画したら、そのまま描画されたままですが、 whileループの場合、 ループごとに、真っ白な状態に初期化され、その上に次の描画が行われ…ということを、 繰り返しているようです。 この時の、「毎回のループの初めに行われているであろう、真っ白な状態への初期化」は、 どういった仕組みで行われているのでしょうか? 別の言い方で言うと、 「whileループの描画処理が、蓄積されていかないのは何故?また、その蓄積がなされない理由(しくみ)はどこに?」 となります。 上記whileループの挙動に対し、 文字と文字が重なっていく、とか、 上段から下段へと文字がどんどん蓄積されながら描画されていく、 なんてことを想定していたわけですが、 実際には、そうはならないため、質問をさせて頂きました。、 このあたりのことについて、どなたか、お分かりになる方、ご教示下さい。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • ラベルに縦書きで文字を書くには

    ラベルに縦書きで文字を書くには drawstringで描画するしかないみたいですね。 かな文字は、正常に縦書きで表示されるのですが 「ω」、「℃」は90度回転し、横になってしまいます。 どうしてでしょうか? 横にならないようにする方法はないのでしょうか?

  • java 角度演算と表示

    今船の航跡を数値化するプログラムをjavaで作っています。 船の場合北(上)を0degとして右回りに角度が増えていきます。 つまり東(右)が90deg 南(下)が180deg・・と右回りになってます。 しかしjavaのプログラムで計算するときは(x,y座標に表示するので)右が0rad 上がπ/2rad 左がπrad・・と左回りですよね? この場合どうやって針路を数学的なラジアン表示に変えればいいのでしょう? いい考えがあったら教えてください。

  • IllustratorのJavaScriptで、文字角度を取得する方法

    IllustratorCS2のJavaScriptで、既存の文字の回転角度を取得する方法がありましたらアドバイスください。 例えば文字を入力して回転ツールで45度回転してあるオブジェクトの45度を取得したいのです。取得する単位は度でもラジアンでも構いません。 textRange.characterAttributes.rotation という方法は見つけたのですが、これですと文字キャラクタに対する角度しか取得できず、私が欲しい情報ではありませんでした。 よろしくお願いします。

  • 任意の文字列をJAVAで画像化

    表題にある通り任意の文字列をJAVAで画像化したいと思い 下記サンプルを検索して見つけたのですが作成される画像は 真っ白な画像で文字列は表示されませんでした。 任意の文字列を画像として出力するにはどうすればよいでしょうか。 import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class Test5 { public static void main(String[] args) { String str = "abc123"; new Test5().Create(str); System.out.println(str); } public void Create(String str) { int w=60; int h=17; try { //受け取った文字列を画像化 BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); Graphics2D g2d=image.createGraphics(); g2d.setBackground(Color.WHITE); g2d.clearRect(0,0,w,h); g2d.setColor(Color.BLACK); g2d.drawString(str,0,0); ImageIO.write(image, "JPEG", new File("c:\\test.jpg")); } catch(Exception e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • Javaで割り当てられていない文字コードを判別

    javaで文字をDrawStringする際に描画対象の文字コードに対して文字が割り当てられていないコードだった場合に特定の文字に置き換える処理を作りたいのですが、その判別方法が分かりません。 外字も対象範囲なのですが、外字登録されているものされていないものを判別しなければいけません。 文字コードはUTF-8です。 どなたかご教授のほど宜しく御願いします。

  • java 大文字と小文字を入れ替える

    JAVAでアルファべットの文字列を読み込んで、その文字列を逆順にして小文字と大文字を入れ替えたいんですけど、どうすればいいのですか。 問題:キーボード入力(abCDE) → 出力(edcBA) 上のようにしたいんですけどどうしたらいいですか?教えてください。

    • ベストアンサー
    • Java
  • 文字列の表示

    Graph2クラスで作った文字と直線をMainFrameクラスで作ったフレームに表示させたいのですが、フレームが作成されるだけで文字と直線が表示されません。どうすれば表示されるのか是非教えてください。お願いします。 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Graph1 { public static void main(String argv[]) { MainFrame MF = new MainFrame(); MF.setVisible(true); } } class MainFrame extends Frame { public MainFrame() { setLocation(500 , 200); setTitle("MainFrame"); setSize(500 , 300); setLayout(null); //Graph2 aGraph2 = new Graph2(); //aGraph2.show(); addWindowListener(new MyWinL()); } private class MyWinL extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("終了しました。\n"); System.exit(0); } } } class Graph2 extends JApplet { public void paint(Graphics g) { g.setColor(Color.GRAY); for (int i=0; i < 5; i++) { g.drawLine(0, 50*i, 400, 50*i); } for (int i=0; i < 9; i++) { g.drawLine(50*i, 0, 50*i, 200); } Font font1 = new Font("Serif" , Font.PLAIN,30); Font font2 = new Font("SansSerif" , Font.PLAIN,30); Font font3 = new Font("MS P明朝" , Font.PLAIN,30); Font font4 = new Font("MS Pゴシック" , Font.PLAIN,30); g.setColor(Color.RED); g.setFont(font1); g.drawString("Hello! Java world!", 50, 50); g.setFont(font2); g.drawString("Hello! Java world!", 50, 100); g.setColor(Color.BLUE); g.setFont(font3); g.drawString("Hello! Java world!", 50, 150); g.setFont(font4); g.drawString("Hello! Java world!", 50, 200); }; }

    • ベストアンサー
    • Java