• 締切済み

createImage()を使い コンパイル

このプログラムをcreateImage()を使ってイメージを作りたいのですが自分で変更してもコンパイルできません><;どのように変更したらイメージをつくることができるのでしょうか?回答よろしくおねがいしまあす(^^; import java.awt.Color; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new Test()); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); } Image image; public Test() { addMouseMotionListener(this); image = new BufferedImage(400, 300, BufferedImage.TYPE INT RGB); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }public void paintComponent(Graphics g) { g.drawImage(image, 0, 0, this); } public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }public void mouseMoved(MouseEvent e) {} }

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.2

 createImageでイメージを作ってグラフィックコンテクストを取得するためには、 取得しようとしているコンポーネントが表示されている必要があります。 以下のように修正/追加すれば同じように表示されると思います。 import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); Test test = new Test(); frame.getContentPane().add(test); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.SetImage(); }; Image image = null; public Test() {}; public void SetImage() { addMouseMotionListener(this); // image = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB); image = createImage(400, 300); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }; public void paintComponent(Graphics g) { if (image != null) g.drawImage(image, 0, 0, this); }; public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }; public void mouseMoved(MouseEvent e) {}; }

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

JComponentの場合、createImage()を使う必要はないので使わないでください。現在のコードのようにBufferedImageを使えば十分です。AWTコンポーネントで、昔はよくcreateImage()を使ってダブルバッファリングをやりましたが、コンポーネントが可視でないと正常に動かないなど、使いづらい面があります。JComponentではダブルバッファリングがデフォルトで実装されており、Image/BufferedImageは、継続描画(インクリメンタルドローイング)を実現するために主に使います。

関連するQ&A

  • createImage()を使いコンパイル

    このプログラムをcreateImage()を使ってイメージを作りたいのですが自分で変更してもコンパイルできません><;どのように変更したらイメージをつくることができるのでしょうか?回答よろしくおねがいしまあす(^^; import java.awt.Color; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new Test()); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); } Image image; public Test() { addMouseMotionListener(this); image = new BufferedImage(400, 300, BufferedImage.TYPE INT RGB); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }public void paintComponent(Graphics g) { g.drawImage(image, 0, 0, this); } public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }public void mouseMoved(MouseEvent e) {} }

  • マウスのイベント処理について

    「/home/tatuya/MyDocument/logo.jpg」の画像をドラック・移動できるようにしたいのですがうまくいきません。 なにがいけないのか教えてください。 できれば手直しして動くようになったプログラムをはってもらえるとさいわいです。 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.imageio.ImageIO; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.Graphics; import java.awt.Image; import java.awt.geom.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class bb extends JFrame{ private int px; private int py; boolean flag=false; Image icon=getToolkit().getImage("/home/tatuya/MyDocument/logo.jpg"); public static void main(String[] args){ bb frame = new bb(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 400, 250); frame.setTitle("タイトル"); frame.setVisible(true); new bb(); } public void paint(Graphics g){ g.drawImage(icon,px,py,this); } public void mouseClicked(MouseEvent e){ /* 処理したい内容をここに記述する */ } public void mouseEntered(MouseEvent e){ /* 処理したい内容をここに記述する */ } public void mouseExited(MouseEvent e){ /* 処理したい内容をここに記述する */ } public void mousePressed(MouseEvent e){ /* 処理したい内容をここに記述する */ if (px<=e.getX() && e.getX()<=px+221 && py<=e.getY() && e.getY()<=py+59) flag=true; repaint(); } public void mouseReleased(MouseEvent e){ /* 処理したい内容をここに記述する */ flag=false; } public void mouseDragged(MouseEvent e){ if (flag){ px=e.getX();py=e.getY(); repaint(); } } public void mouseMoved(MouseEvent e){ } }

  • Javaプログラムの繋げ方について。

    Javaプログラムの繋げ方について。 今まで(1)のようなプログラムを書いていました。 作りたいものに向けて色々検索するとやりたいものに近い(2)のようなサンプルプログラムを見つけました。 しかし、Java初心者なもので混ぜ方(?)がわかりません。 現在の私の知識からいうと今までのはアプレットでフレーム使うのはアプリケーションなのかな?別物なのかな?そんな感じです。 もし、混ぜることができるなら何かアドバイスをお願いします。 (1)package test; import java.applet.* ; import java.awt.Label ; import java.awt.Font ; import static java.awt.Font.BOLD ; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; public class test extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); g.fillOval(320, 200, 100, 100); } public void init () { ~~~~~~~~~~~~~~~~ } public void start () { ------------ }}} (2)import java.awt.*; import java.awt.event.*; public class MouseEvent7 extends Frame { int posX = 50; int posY = 50; public static void main(String [] args){ new MouseEvent7(); } //コンストラクタ MouseEvent7(){ this.addWindowListener(new WinAdapter()); //ウィンドウリスナーの登録 this.setSize(200,200); this.setVisible(true); //MouseMotionListenerの登録 addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ posX = e.getX(); posY = e.getY(); repaint(); //paintメソッドを実行 } } ); } public void paint(Graphics g){ g.drawOval(posX,posY,50,50); } } (1)の内容に本当に(2)のプログラムで出来るマウスの動きに合わせて円も動く+クリックしたらそこで止まるだけいいのですが。 出来たら止まった点の座標も取りたいですが、そこまではいってません;;

  • javaの画像の表示のプログラムとmouselistenerのプログラ

    javaの画像の表示のプログラムとmouselistenerのプログラム(それぞれ↓にあります)をひとつに合わせたいのですがどうすればいいでしょうか? import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel implements MouseListener{ public MyPanel() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { int x=e.getX(); int y=e.getY(); System.out.println("マウスがクリックされました (" + e.getX() + ", " + e.getY() + ")"); if((x<100&&x>40)&&(y<100&&y>40)){ System.out.println("範囲内"); }else{ System.out.println("aaa"); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } } public class MouseEventExample extends JFrame { public static void main(String[] args) { new MouseEventExample(); } MouseEventExample() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new MyPanel()); setSize(300, 200); setVisible(true); } } ======↑のプログラムと↓のプログラムを合わせたいのです package novel; import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class Java2dTest extends JFrame{ public static void main(String[] args){ Java2dTest test = new Java2dTest(); test.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); test.setBounds( 0, 0, 200, 200); test.setVisible(true); } public void paint(Graphics g){ Graphics2D g2 = (Graphics2D)g; BufferedImage readImage = null; try { readImage = ImageIO.read(new File("sample.png")); } catch (Exception e) { e.printStackTrace(); readImage = null; } if (readImage != null){ g2.drawImage(readImage, 0, 0, this); } } }

  • paintメソッドでエラー

    以下はSwingのフレーム上に画像を表示させようとして書いたものの全文です。実行するとSyntax errorがでますが、これはどうしてでしょうか。 なおべつのプログラムでmainメソッドとpaintメソッドを同じクラスに書いたらうまく表示できました。 アドバイスお願いします。 import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; public class MyImage3 {  public static void main(String[] args) {   MyFrame7 frame1=new MyFrame7();   frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame1.pack();   frame1.setBounds(100,100,400,320);   frame1.setVisible(true);  } } class MyFrame7 extends JFrame{  public MyFrame7(){   public void paint(Graphics g){   //この行でSyntax error発生    BufferedImage bImage1=null;    try {     bImage1=ImageIO.read(getClass().getResource("k_1pin.gif"));    } catch (Exception e) {     e.printStackTrace();    }    g.drawImage(bImage1,40,40,this);   }  } }

    • ベストアンサー
    • Java
  • アップレットのアクションリスナーが動作しません

     アップレットにアクションリスナーをつけて、アップレットとキャンバスにアクションが来るように 下の様なコードを書いてやりましたがうまく動作しません。どこがまずいのでしょうか、宜しくお願 いします。  ・mouseClickedするとアプレットに四角を書くようにしていますが、最初に表示されてしまいます。  ・mouseEnteredするとキャンバスに四角を書くようにしていますが、最初には表示されず、 mouseEnteredでも四角を書きません。  ・"cs.paint(g);"での書き方が悪いのでしょうか。「gを解決できません」と表示されます。   "paint(g);"としても同じです、"mouseClicked"の中でも同じ書き方ですが、   「gを解決できません」というエラー表示は出ていません。  原因が全く分かりません、どこをどのように修正したら良いのでしょうか、宜しくお願い致します。 ================================================================== import java.applet.Applet; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; public class ActionTest extends Applet implements MouseListener { Canvas cs ; public void init() { this.setBackground(Color.pink); Canvas cs = new Canvas( ) ; cs.setBackground(Color.green); cs.setSize( 100 , 100 ) ; this.add( cs ) ; this.addMouseListener( this ) ; } public void paint(Graphics g) { g.fillRect( 50 , 50 , 10 , 10 ) ; } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics() ; setBackground( Color.cyan ) ; paint(g) ; repaint(); } public void mouseEntered(MouseEvent e) { cs.setBackground( Color.orange ) ; cs.paint(g) ; repaint(); } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } } ==================================================================

    • ベストアンサー
    • Java
  • AWTの質問

    以下のようなコードを書きました。円の中をクリックすると赤色に塗りつぶしたいようにしたいのですが、現状だとどこをクリックしても赤色に塗りつぶされます。(クリックした座標が円の範囲にあれば。。)というような処理を付け加えたいのですが手順がわかりません。コードで示してもらえると助かります。 import java.applet.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class En extends Applet implements MouseListener{ public void init() { this.addMouseListener(this); } public void paint(Graphics g) { g.fillOval(20, 25, 500, 400); } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics(); g.setColor(Color.red); //ここに何か書くべきと思われる g.fillOval(20, 25, 500, 400); } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }

    • ベストアンサー
    • Java
  • 音楽を流したい。

    現在画像や文字を表示させるとともに、BGMも同時に流れるようになるプログラムを作っていますが、BGMを流すための処理メソッド(?)が分からなくて困っています。 分かる方は教えていただけると有難いです。 BGMのファイル名は「bgm.mid」です。 <プログラムソース> import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.lang.String; import java.awt.Font; import javax.swing.*; class BGMTest extends JFrame{ public BGMTest() { add(new DrawPanel()); } public static void main(String args[]){ JFrame frame = new GameTitle(); frame.setSize(640, 480); frame.setTitle("BGMテスト"); frame.setLocationRelativeTo(null); frame.setBackground(Color.pink); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class DrawPanel extends JPanel{ String path = "start.jpg"; Image image; public DrawPanel() { ImageIcon icon = new ImageIcon(path); image = icon.getImage(); } public void paintComponent(Graphics args) { super.paintComponent(args); args.drawImage(image, 0, 0, this); args.setFont(new Font("TimesRoman",Font.ITALIC,100)); args.setColor(Color.red); args.drawString("BGMテスト", 120, 230); } }

  • 画面のちらつきの原因が知りたいです

    JAVAの初心者です、宜しくお願いします。 下のようなプログラムを書きました。 「public void paint(Graphics g){ ~ repaint();」とすると、画像がちらつきます、しかし、「repaint();」を消すとちらつかなくなります、この原因が分かりません。 一体何故このような現象が起こるのでしょうか、宜しくお願いします。 ========================================================== import java.applet.Applet; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Oval_Rec_1_071128 extends Applet implements MouseListener , ActionListener { int x1 ; int y1 ; int xh = 50 ; int yv = 50 ; Button bt1 ; Button bt2 ; public void actionPerformed(ActionEvent ae){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void init() { setBackground(Color.yellow); addMouseListener(this); bt1 = new Button("push"); bt1.setFont(new Font("SansSerif", Font.BOLD, 20)); bt1.setBackground(Color.black); bt1.setForeground(Color.lightGray); add(bt1); bt1.addActionListener(this); bt2 = new Button("change_circle"); add(bt2); bt2.addActionListener(this); } public void mousePressed(MouseEvent e) { x1 = e.getX(); y1 = e.getY(); xh = e.getX(); yv = e.getY(); // repaint(); //comment out } public void paint(Graphics g) { g.setColor(Color.red); g.setFont(new Font("Serif",Font.BOLD,24)); g.drawString("Hello Applet World ! !" , 50 , 50); g.setColor(Color.blue); g.drawLine( 100 , 100 , 500 , 500); g.setColor(Color.cyan); g.fillOval( x1 , y1 , xh , yv); g.setColor(Color.magenta); g.fillRect( xh , yv, x1/10 , y1/10 ); repaint(); } }

    • ベストアンサー
    • Java
  • 簡単なこーどですが、エラーの原因が分かりません

    今晩は、JAVAの初心者です、宜しくお願いします。 下のコードでエラーがでます、いくら考えても原因がさっぱり分かりません。 一体何処が悪いのでしょうか、宜しくお願いします。 また、最後の「j.show();」では警告が出ています。 何が原因でしょう?? ============================================================ import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; class JFrame_Ohayou extends JFrame implements WindowListener{ /*********** コンストラクタ ********************/ public JFrame_Ohayou(){ setSize(400,300); setTitle("JFrameのテスト"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } /******************* paint ***********************/ public void paint(Graphics g){ super.paint(g); g.drawString("おはよう",20,40); } } /******************* main ***********************/ public class JFrameTest{ public static void main(String[] args){ JFrame_Ohayou j = new JFrame_Ohayou(); j.show(); } } =============================================================

    • ベストアンサー
    • Java

専門家に質問してみよう