- 締切済み
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) {} }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ssr-y6
- ベストアンサー率71% (5/7)
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)
JComponentの場合、createImage()を使う必要はないので使わないでください。現在のコードのようにBufferedImageを使えば十分です。AWTコンポーネントで、昔はよくcreateImage()を使ってダブルバッファリングをやりましたが、コンポーネントが可視でないと正常に動かないなど、使いづらい面があります。JComponentではダブルバッファリングがデフォルトで実装されており、Image/BufferedImageは、継続描画(インクリメンタルドローイング)を実現するために主に使います。