2011-07-01 7 views
1

마우스 캡처로 java의 창에 픽셀을 그릴 수있는 방법을 찾은 날을 보았습니다. 난 그냥 플러그인 할 수있는 몇 가지 프레임 워크를 찾고 있는데요. 그것은 그렇게 간단한 것 같아요 ... 어떤 도움을 주시면 감사하겠습니다.마우스 입력 창에 픽셀을 그려 넣으려고합니다.

(EDIT) 다음은 작동하지 않는 코드입니다.

public class Base extends JPanel implements MouseMotionListener { 

    public static void main(String[] args) { 
     new Base(); 
    } 

    final static int width = 800; 
    final static int height = 600; 
    BufferedImage img; 
    Base() { 
     img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE); 
     JFrame frame = new JFrame(); 
     frame.addMouseMotionListener(this); 
     frame.add(this); 
     frame.setSize(width, height); 
     frame.setEnabled(true); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     Graphics g = img.getGraphics(); 
     g.drawRect(1, 1, width - 2, height - 2); 
     g.dispose(); 
     repaint(); 
    } 
    @Override 
    public void paintComponent(Graphics g) { 
     g.drawImage(img, 0, 0, null); 
    } 

} 
+0

자세한 정보를 제공 할 수도 있습니다. 예를 들어 어떤 그래픽과 GUI 라이브러리를 사용하고 있습니까? 그네? SWT? 다른? 시도해 봤어? –

+1

그것은 스스로하기가 그렇게 어렵지도 않습니다. 소용돌이 치고, 어떻게되는지보십시오. –

+0

제 문제 중 일부는 어디서부터 시작해야할지 모르겠습니다. – motoku

답변

2
그 방법이 뭔가를 수행하여 BufferedImage의에 그리기

enter image description here

송시.

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.*; 
import javax.swing.*; 

public class Base extends JPanel implements MouseMotionListener { 

    public static void main(String[] args) { 
     new Base(); 
    } 

    final static int width = 400; 
    final static int height = 300; 
    BufferedImage img; 
    Base() { 

     img = new BufferedImage(width, height, 
      BufferedImage.TYPE_INT_ARGB_PRE); 
     // do in preference to setting the frame size.. 
     setPreferredSize(new Dimension(width, height)); 
     JFrame frame = new JFrame(); 
     this.addMouseMotionListener(this); // INSTEAD OF THE FRAME 
     frame.add(this); 
     //frame.setSize(width, height); DO INSTEAD... 
     frame.pack(); 
     //frame.setEnabled(true); REDUNDANT 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // good call! 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     Graphics g = img.getGraphics(); 
     g.setColor(Color.RED); // SET A COLOR 
     g.drawRect(1, 1, width - 2, height - 2); 

     // DO SOMETHING UGLY 
     g.setColor(Color.blue); 
     Point p = e.getPoint(); 
     g.fillOval(p.x,p.y,5,5); 

     g.dispose(); 
     repaint(); 
    } 
    @Override 
    public void paintComponent(Graphics g) { 
     g.drawImage(img, 0, 0, null); 
    } 
} 
0

그리려는 로컬 BufferedImage를 사용하십시오. MouseMotionListener를 추가하고 mouseDragged(MouseMotionEvent evt) 메서드를 구현하십시오. 이 같은 그릴,

// Assume img is your BufferedImage 
Graphics g = img.getGraphics(); 
g.drawRect(evt.getX()-1, evt.getY()-1, 3, 3); 
g.dispose(); 
// repaint your swing component 
repaint(); 

그리고 당신의 오버라이드 paintComponent(Graphics g) 방법 :

g.drawImage(img, 0, 0, null); 

은 다음과 같이 당신의 BufferedImage를 초기화 :

img = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE); 
// Assuming `this` is your swing component 
+0

왜'BufferedImage'인가? 'JPanel'은 기본적으로 더블 버퍼링됩니다. – trashgod

+0

나는 귀하의 답변을 시도하고 초기 질문에 귀하의 의견을 추가했지만 작동시키지 못했습니다. – motoku

관련 문제