아래에 실수가있는 내 코드의 단축 버전을 볼 수 있습니다. 저는 MS Paint와 비슷한 프로그램을 만들고 있습니다. 문제는 내가 예를 들어 그림을 그릴 때입니다. 직사각형과 내가 그려진 사각형이 실제로 어떻게 생겼는지보고 싶다면 마지막까지 모든 직사각형이 프로그램에 의해 그려집니다. 그런 다음 코드의 주석 부분을보고 약간의 변경 (이전 코드 사용 안 함)을 사용하면 작동하도록 작동합니다. 그러나 프로그램은 그림을 PC의 메모리에 저장해야하며이 방법으로 작동시키지 않아야합니다. 나는 JAVA에서 꽤 초보자이며 실수로 어디에 있는지 알지 못한다. 주어진 방법이 drawImage
이고 이미지가 필요하다. 그게 내가하고있는 일이다.직사각형의 실제 모양이 작동하지 않습니다.
내가 바라는 것을 이해할 수 있기를 바랍니다. 당신이 할 수없는 기회라면, 코드를 복사 해 놓으면 쉽게 시험해 볼 수 있습니다. 첫 번째 객체 그리기를 시도하면 실수가 표시됩니다.
일등석 :
import java.awt.BorderLayout;
import javax.swing.JFrame;
public class MyPaint extends JFrame{
private Desk paintDesk;
public static void main(String[] args) {
@SuppressWarnings("unused")
MyPaint frame = new MyPaint();
}
MyPaint()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(400, 100, 600, 600);
setResizable(false);
setLayout(new BorderLayout());
paintDesk = new Desk();
this.getContentPane().add(paintDesk,BorderLayout.CENTER);
setVisible(true);
}
}
2 등석 : 항상 이미지에 그림의
이import java.awt.*;
import java.awt.event.*;
import java.awt.image.RenderedImage;
import java.io.IOException;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
public class Desk extends JComponent{
private Image paintedImage;
private Image newImage;
private Graphics2D graphics;
private Point a;
private Point b;
public Desk()
{
a= new Point();
b= new Point();
setDoubleBuffered(false);
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
if(SwingUtilities.isLeftMouseButton(e))
{
/*try {
ImageIO.write((RenderedImage)paintedImage, "JPG", new File("actual.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/
newImage= paintedImage;
a.x = e.getX();
a.y = e.getY();
}
}
});
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
if(SwingUtilities.isLeftMouseButton(e))
{
/*try {
newImage= (ImageIO.read(new File("actual.jpg")));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/
if(newImage!=null)
{
graphics.drawImage(newImage,0,0,null);
repaint();
}
b.x = e.getX();
b.y = e.getY();
if(graphics != null)
{
drawRect();
}
repaint();
}
}
});
addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
if(SwingUtilities.isLeftMouseButton(e))
{
b.x = e.getX();
b.y = e.getY();
if(graphics != null)
{
drawRect();
}
repaint();
}
}
});
}
public void paintComponent(Graphics g){
if(paintedImage == null)
{
paintedImage = createImage(getSize().width, getSize().height);
graphics = (Graphics2D)paintedImage.getGraphics();
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
clear();
}
g.drawImage(paintedImage, 0, 0, null);
}
private void clear()
{
graphics.setPaint(Color.white);
graphics.fillRect(0, 0, getSize().width, getSize().height);
graphics.setPaint(Color.red);
repaint();
}
private void drawRect()
{
graphics.drawLine(a.x, a.y, b.x, a.y);
graphics.drawLine(a.x, a.y, a.x, b.y);
graphics.drawLine(a.x, b.y, b.x, b.y);
graphics.drawLine(b.x, a.y, b.x, b.y);
}
}