文字列の表示

このQ&Aのポイント
  • 文字列の表示方法を教えてください
  • Graph2クラスで作った文字と直線をMainFrameクラスで作ったフレームに表示させたい
  • 表示されない原因と改善方法を教えてください
回答を見る
  • ベストアンサー

文字列の表示

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 Graph2はJAppletやのうてJPanelから派生させて、Frameにaddしてあげて、setSizeしてあげて、repaintしないとだめよ。もう少し良いコードに直せると思うが、ちょちょっと手直ししたのを載せる。直したところにはコメントを入れてある。 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 { Graph2 aGraph2; // aGraph2は一応今後の拡張のためにクラス変数に public MainFrame() { setLocation(500 , 200); setTitle("MainFrame"); setSize(500 , 300); setLayout(null); aGraph2 = new Graph2(); aGraph2.setVisible(true); // show()は古い this.add(aGraph2); // this(=MainFrame)の上に乗せる aGraph2.setSize(300, 250); // フレームに合わせて大きさを変える aGraph2.repaint(); // paint(Graphics)を呼び出す addWindowListener(new MyWinL()); } private class MyWinL extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("終了しました。\n"); System.exit(0); } } } class Graph2 extends JPanel { // JPanelから派生 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); }; }

atano13
質問者

お礼

とても参考になりました。ありがとうございました。

関連するQ&A

  • paint()以外でサブ関数を作りたい

     今晩は、java初心者です、宜しくお願いします。  下の様なウインドウに文字を書くサブ関数を作りましたが、うまく実行出来ません。  しかし、public void paint( Graphics g){ }の中に書いてやるとうまく文字が表示されます。  何故か理由が分かりません。  public void paint( Graphics g ){ }は、Componentクラスのメッソドをオーバーライドしている だけなので、別名のサブ関数で「Graphics g」を引数にとれば同じ考えだと思うのですが、 実行出来ない理由が理解できません。  public void drawLetter( Graphics g )としても、エラーが出るばかりです。  その原因が分かりません、宜しくお願いします。 ==================================================================== public void drawLetter( ) { Graphics aa = getGraphics() ; aa.setFont( new Font( "MS ゴシック" , Font.BOLD , 15 ) ) ; aa.setColor( Color.green ) ; aa.drawString( "String" , 0 , 0 ) ; } ============================================================= public class P1 extends Applet { public void init() { setBackground( Color.cyan ) ; setSize( 600 , 600 ) ; drawLetter( ) ; } public void drawLetter( ) { Graphics aa = getGraphics() ; aa.setFont( new Font( "MS ゴシック" , Font.BOLD , 15 ) ) ; aa.setColor( Color.green ) ; aa.drawString( "String" , 0 , 0 ) ; } public void paint( Graphics g ) { g.setColor( Color.RED ) ; g.drawOval( 300 , 300 , 70 , 70 ) ; g.setColor( Color.RED ) ; g.fillOval( 200 , 200 , 30 , 30 ) ; /* g.setFont( new Font( "MS ゴシック" , Font.BOLD , 15 ) ) ; g.setColor( Color.BLUE ) ; g.drawString( "Orbit" , 50 , 50 ) ; */ } } =======================================================================

    • ベストアンサー
    • Java
  • Fontの指定ができず困っています。

     フォントを設定し、文字を表示させる以下のようなプログラムを作 成しました。しかし、コンパイルするとエラーが表示されます。 --------------------------------------------------------- import java.applet.*; import java.awt.*; public class moji extends Applet{ public void paint(Graphics g){ Font fnt = new Font("Serif",Font.BOLD,18); g.setFont(fnt); g.drawString("Hello Java",10,10); } } --------------------------------------------------------- エラーの内容は以下の通りです。 --------------------------------------------------------- moji.java:5: シンボルを見つけられません。 シンボル: 変数 BOLD 場所 : Font の クラス Font fnt = new Font("Serif",Font.BOLD,18); ^ moji.java:5: 内部エラーです。Font.<init> を Font で () にイン スタンス生成できません。 Font fnt = new Font("Serif",Font.BOLD,18); ^ moji.java:6: setFont(java.awt.Font) (java.awt.Graphics 内) を (Font) に適用できません g.setFont(fnt); ^ ---------------------------------------------------------  なぜ、このようなエラーがでるのか教えていたたでないでしょう か?よろしくお願いします。

    • ベストアンサー
    • Java
  • フォントの使用方法

    次のプログラムでフォントを変更できるはずなのですが・・・。 ※import文省略 public class StringDisplay extends Applet{  public void paint(Graphics g) {   g.drawString("文字が書けました",100, 50);   g.setFont(new Font("MS 明朝", Font.PLAIN, 25));   g.drawString("文字が書けました",100,100);   g.setFont(new Font("MS ゴシック", Font.BOLD, 30));   g.drawString("文字が書けました",100,150);  } } --実行結果-- ・MS明朝及びMSゴシックにならない ・「文字が書けました」は3つとも出ている ・3つとも初期設定フォントの「dialog」らしい ・文字の大きさは変更されている ・3つ目に太字は適用されている ・他のアプリケーション(キューブペイントなど)で文字を書くときにはMS明朝・MSゴシックは使用できる こんな感じなのですが、なぜフォントが変更できないのかが分かりません。 全く同じプログラムではありませんが、以前はちゃんと変更できました。 どなたかお分かりになる方はいませんでしょうか?

    • ベストアンサー
    • Java
  • java初心者です。座標取得と図形表示について

    マウスをクリックするとその座標を表示するプログラムです。 画面には常に二つの四角形が表示されていて、どこをクリックしたかによって表示が変わるというものです。 (オレンジの四角形内をクリックした場合、 X:100 オレンジ Y:100 オレンジ のように表示します。) ですが、私が組んでみたプログラムでは図形表示が一瞬だけになってしまいます。 また、ウインドウの大きさを動かしてみると一瞬移っては消えてしまうという状態です。 それから、「オレンジ」などの日本語表示がうまくいかず「□□□」のように表示されてしまいます。 これらの問題を解決するにはどこをどう修正したらよいでしょうか? 以下が初心者なりに組んでみたソースです。 import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.Toolkit; import java.awt.Graphics2D; import java.awt.Graphics; import java.awt.Font; import java.awt.Rectangle; import java.lang.String; import java.lang.System; import javax.swing.JFrame; import javax.swing.JPanel; public class kadai33 extends JFrame { private static final long serialVersionUID = 1L; public kadai33() { add(new DrawPanel()); } public static void main(String[] args) { Toolkit.getDefaultToolkit().setDynamicLayout(true); JFrame f = new kadai33(); f.setTitle("マウスの座標を表示"); f.setDefaultCloseOperation(EXIT_ON_CLOSE); f.setBackground(Color.WHITE); f.setSize(400, 750); f.setVisible(true); } class DrawPanel extends JPanel implements MouseListener { int x; int y; public DrawPanel() { setBackground(Color.white); addMouseListener(this); } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } public void paint(Graphics g) { Font font=new Font("Arial",Font.PLAIN,16); super.paintComponent(g); //super.paint(g); Graphics2D g1 = (Graphics2D)this.getGraphics(); Rectangle rect = new Rectangle(); rect.setRect(50,50,200,200); g1.setColor(Color.ORANGE); g1.fill(rect); Graphics2D g2 = (Graphics2D)this.getGraphics(); Rectangle rect2 = new Rectangle(); rect2.setRect(150,350,150,150); g2.setColor(Color.GREEN); g2.fill(rect2); Graphics2D g3 = (Graphics2D)this.getGraphics(); Rectangle rect3 = new Rectangle(); rect3.setRect(50,650,200,50); g3.setColor(Color.BLACK); g3.fill(rect3); if(x>=50 && x<=250 && y>=50 && y<=250){ super.paintComponent(g); String sx = String.format("X:%d", x); String sy = String.format("Y :%d", y); g.setFont(font); g.setColor(Color.BLACK); g.drawString(sx, 65, 670); g.drawString(sy, 65, 690); Graphics2D g4 = (Graphics2D)g; g4.setFont(font); g4.setColor(Color.WHITE); g4.drawString("オレンジ",120,670); g4.drawString("オレンジ",120,690); } if(x>=150 && x<=300 && y>=350 && y<=500){ super.paintComponent(g); String sx = String.format("X:%d", x); String sy = String.format("Y :%d", y); g.setFont(font); g.setColor(Color.BLACK); g.drawString(sx, 65, 670); g.drawString(sy, 65, 690); Graphics2D g5 = (Graphics2D)g; g5.setFont(font); g5.setColor(Color.WHITE); g5.drawString("グリーン",120,670); g5.drawString("グリーン",120,690); } else{ super.paintComponent(g); String sx = String.format("X:%d", x); String sy = String.format("Y :%d", y); g.setFont(font); g.setColor(Color.BLACK); g.drawString(sx, 65, 670); g.drawString(sy, 65, 690); Graphics2D g6 = (Graphics2D)g; g6.setFont(font); g6.setColor(Color.WHITE); g6.drawString("対象外",120,670); g6.drawString("対象外",120,690); } } } } 大変困っています。 どうかよろしくお願いいたしますm(__)m

    • ベストアンサー
    • Java
  • 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
  • Java Applet での虫食い算での質問

    初めて利用させていただきます。 今、課題で虫食い算のプログラムを作成しているのですが、うまく動作してくれません。 もしよろしければご指摘をしてもらえればと思い書き込みのほうをさせていただきます。 import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Event; import java.awt.Font; import java.awt.Graphics; import java.awt.Panel; import java.applet.Applet; public class musikuizan_1 extends Applet { int A, B; int cnt; int sub(int n,int m) { int i; for (i=1; i<m; i++) n /= 10; return n % 10; } void puzzle() { int a; int b; int c; int d; int e; for (a=1; a<=99; a++) { for (b=1; b<=99; b++) { c = a * (b % 10); d = a * (b / 10); e = a * b; if (c>=100 && c<=999 && d>=10 && d<=99 && e>=100 && e<=999) /*桁数調整*/ { if (sub(b,1)==3 && sub(c,2)==1 && sub(d,2)==8) /*穴埋めされてある部分の数*/ { A = a; B = b; cnt++; } } } } } public void init() { setBackground(new Color(150,180,200)); setLayout(new BorderLayout()); Panel psouth = new Panel(); psouth.add(new Button("実行")); add("South", psouth); } public void paint(Graphics g) { int i, c, d, e; for (i=1; i<=2; i++) { g.drawRect(97-i*20, 5,16,16); g.drawRect(97-i*20,25,16,16); g.drawRect(77-i*20,65,16,16); } for (i=1; i<=3; i++) { g.drawRect(97-i*20,45,16,16); g.drawRect(97-i*20,85,16,16); } for (i=1; i<=4; i++) g.drawLine(30,43,100,43); g.drawLine(30,83,100,83); g.setFont(new Font("Helvetica",Font.BOLD,18)); g.drawString("x",40, 40); if (A == 0) { g.drawString("3",60, 40); g.drawString("1",60, 60); g.drawString("8",60, 80); g.setFont(new Font("Helvetica",Font.PLAIN,12)); g.drawString("cnt = ",30,115); } else { c = A * (B % 10); d = A * (B / 10); e = A * B; g.setFont(new Font("Helvetica",Font.BOLD,18)); for (i=1; i<=2; i++) { g.drawString(Integer.toString(sub(A,i)),100-i*20, 20); g.drawString(Integer.toString(sub(B,i)),100-i*20, 40); } for (i=1; i<=3; i++) { g.drawString(Integer.toString(sub(c,i)),100-i*20, 60); g.drawString(Integer.toString(sub(d,i)), 80-i*20, 80); } for (i=1; i<=4; i++) g.drawString(Integer.toString(sub(e,i)),100-i*20,100); g.setFont(new Font("Helvetica",Font.PLAIN,12)); g.drawString("cnt = "+Integer.toString(cnt),30,115); } } public boolean action(Event e, Object arg) { if ("実行".equals(arg)) { if (A == 0) puzzle(); else A = cnt = 0; repaint(); } return true; } }

    • ベストアンサー
    • Java
  • drawStringの座標について

    paintメソッド内で、drawStringで文字列を、 drawImageで画像をそれぞれ表示しています。 drawStringとdrawImageの両方で、同じ座標を 指定しても表示位置がずれます。x座標は ぴったり一致するのですがy座標が7から8ポイント ほどずれます。この二つのメソッドによる座標 と表示位置を一致させたいのですが、よい方法は ありませんでしょうか。どうぞよろしくお願い いたします。 public void paint(Graphics g) { g.drawImage(image,20,20,100,20); Font fnt=new Font("HGゴシックM",Font.PLAIN,12); g.setFont(fnt); g.drawString("Hello",20,20);//座標値はおなじで               も表示位置がずれる }

    • ベストアンサー
    • Java
  • 色が変わる文字について

    javaの初心者です。 環境OSWindows2000 使用ソフトjavaBuilder5です。 今回入門書を見ながら作ったのですが、 (写したが正しいかな?) 実行すると文字の後ろの色がグレーになります。 これを変更する方法を教えてください 黒とか赤とかに変更したいのです。 ーーーソースーーー import java.applet.Applet; import java.awt.*; import java.lang.*; public class TopTitle extends Applet implements Runnable{ Thread th=null; String msg="",cen="",def="",aft=""; int no,width,wait; public void init(){ msg=getParameter("MESSAGE"); msg=" "+msg+" "; no=msg.length(); wait=Integer.parseInt(getParameter("WAIT")); } public void update(Graphics g){ paint(g); } public void paint(Graphics g){ Font f=new Font("TimesRoman",Font.BOLD,48); FontMetrics fm=getFontMetrics(f); g.setFont(f); int width=fm.stringWidth(def); g.setColor(new Color(0,0,255)); g.drawString(msg,0,48); g.setColor(new Color(125,125,125)); g.drawString(cen,width,48); } public void start(){ if (th==null){ th=new Thread(this); th.start(); } } public void run(){ int i; while (true){ try{ for(i=0;i<no-1;i++){ def=msg.substring(0,i); cen=msg.substring(i,i+1); th.sleep(1000); repaint(); } th.sleep(wait); } catch(InterruptedException e){} } } public void stop(){ if(th!=null){ th.stop(); th=null; } } }

    • ベストアンサー
    • Java
  • 文字制限節約のためimportは省きます

    文字制限節約のためimportは省きます public class MojiTest0621p2 { JFrame frame1; BufferStrategy bstrategy; int count =0; MojiTest0621p2(){     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(600 + insets.left + insets.right,400 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null);          frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); Timer t=new Timer(); t.schedule(new MyTimerTask(),10,500); } public static void main(String args[]){ MojiTest0621p2 gtm =new MojiTest0621p2(); } class MyTimerTask extends TimerTask{ @Override public void run() { Graphics g=bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ Insets insets=frame1.getInsets(); g.translate(insets.left,insets.top);//左上 文字は別 g.setColor(Color.BLUE); String sa = "Hello、Worldハローワールド"; // 文字列saを生成 String sb = "えんがち"; // 文字列sbを生成 String sc = "あつい"; // 文字列scを生成 int gyo1=0; int gyo2=0; int gyo3=0; String str1="Hello、Worldハローワールド"; String str2="えんがち"; g.setFont(new Font("SansSerif",Font.BOLD,20)); for(gyo1=1;gyo1<=sa.length();gyo1++){ String s1 = sa.substring(0 , gyo1); // 1文字目からi文字目を取得 g.drawString(s1, 100, 100); } if(str1.equals(sa)==true){ for(gyo2=1;gyo2<=sb.length();gyo2++){ String s2 = sb.substring(0 , gyo2); // 1文字目からi文字目を取得 g.drawString(s2, 100, 150); } } (str2.equals(sb)==true){ for(gyo3=1;gyo3<=sc.length();gyo3++){ String s3 = sc.substring(0 , gyo3); g.drawString(s3, 100, 200); } } bstrategy.show();} g.dispose(); } } } javaの質問です ノベルゲームのTimerTaskでオートモードを作りたいのですがうまく作れません。 Hello、Worldハローワールドを一文字ずつ毎秒ごとに描画し、読み終わったら えんがちを一文字ずつ描画するというプログラムを組みたいです。 上記のプログラムをベースに(でもいくらでも変えていいですよ)改善箇所、修復箇所を お願いします

    • ベストアンサー
    • Java
  • javaの基本

    ここに書いてある http://www.tohwa-u.ac.jp/~kodama/java/1_world.html import java.applet.*; import java.awt.*; public class hello extends Applet { public void paint(Graphics g) { g.drawString("Hello World",20,20); } } hello.javaを作って ターミナルでjavac hello.javaでコンパイルして appletviewer hello.java とやるんですが sun.Applet.Mainというappletviewerが出て ウインドウが出ず困っています コードも間違ってないし 合ってると思います http://www.tohwa-u.ac.jp/~kodama/java/pictures/viewer01.jpg 見たいにでず sun.applet.mainというアプリみたいなのがドックに出て 3秒くらいで消えてしまいます 何故なんでしょう? どなたか詳しい方教えて下さい

    • ベストアンサー
    • Java