dポイントプレゼントキャンペーン実施中!

このプログラムを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) {}
}

A 回答 (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) {};

}
    • good
    • 0

JComponentの場合、createImage()を使う必要はないので使わないでください。

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!