2012-11-13 2 views
0

"페인트"프로그램에 대한 도움이 필요합니다. GUI를 설정했는데 프로그램의 실제 그리기 부분에 문제가 있습니다. 내가 그리는 모든 것은 내가 그린 후에 사라지고, 나는 그 이유를 알 수 없다.Java Painting issues

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class JPaint extends JFrame implements ActionListener, MouseListener, MouseMotionListener { 

int x, y, x2, y2; 
private int select = 0; 
private Graphics g; 
private PaintPanel DrawPanel = new PaintPanel(this); 
private JPanel ButtonPanel = new JPanel(); 
private JTextArea Draw = new JTextArea(20,20); 
private JButton jbtRed = new JButton("Red"); 
private JButton jbtGreen = new JButton("Green"); 
private JButton jbtBlue = new JButton("Blue"); 
private JButton jbtErase = new JButton("Eraser"); 
private JButton jbtClear = new JButton("Clear"); 
PaintPanel l=new PaintPanel(this); 

public JPaint(){ 
    super("Java Paint"); 
    setSize(480,320); 
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

    //build draw panel 
    DrawPanel.setBackground(Color.WHITE); 

    add(DrawPanel, BorderLayout.CENTER); 
    DrawPanel.setVisible(true); 
    //build button panel 

    ButtonPanel.add(jbtRed); 
    ButtonPanel.add(jbtGreen); 
    ButtonPanel.add(jbtBlue); 
    ButtonPanel.add(jbtErase); 
    ButtonPanel.add(jbtClear); 

    add(ButtonPanel, BorderLayout.SOUTH); 
    ButtonPanel.setVisible(true); 

    jbtRed.addActionListener(this); 
    jbtGreen.addActionListener(this); 
    jbtBlue.addActionListener(this); 
    jbtErase.addActionListener(this); 
    jbtClear.addActionListener(this); 
    DrawPanel.addMouseMotionListener(this); 
    DrawPanel.addMouseListener(this); 

} 


     public void actionPerformed(ActionEvent e){ 

      if(e.getSource() == jbtRed){ 
       DrawPanel.setToolTipText("Color set to 'Red'"); 
       select = 1; 
       } 
      if(e.getSource() == jbtGreen){ 
       DrawPanel.setToolTipText("Color set to 'Green'"); 
       } 
      if(e.getSource() == jbtBlue){ 
       DrawPanel.setToolTipText("Color set to 'Blue'"); 
       } 
      if(e.getSource() == jbtErase){ 
       DrawPanel.setToolTipText("Erase Selected"); 
       } 
      if(e.getSource() == jbtClear){ 
       DrawPanel.setToolTipText("Drawing cleared"); 
       } 



     } 




@Override 
public void mouseDragged(MouseEvent e) { 


    x = e.getX(); 
    y = e.getY(); 
    DrawPanel.repaint(); 



} 


@Override 
public void mouseMoved(MouseEvent e) { 



} 


@Override 
public void mouseClicked(MouseEvent e) { 



} 


@Override 
public void mouseEntered(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 


@Override 
public void mouseExited(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 


@Override 
public void mousePressed(MouseEvent e) { 

    x = e.getX(); 
    y = e.getY(); 


} 


@Override 
public void mouseReleased(MouseEvent e) { 

    x2 = e.getX(); 
    y2 = e.getY(); 
    DrawPanel.repaint(); 

} 

} 

     class PaintPanel extends JPanel 
      { 
       JPaint p; 
       PaintPanel(JPaint in){ 
        p=in; 
       } 
       public void paintComponent(Graphics g) 
       { 

        super.paintComponent(g); 

        // clear the screen 
        g.setColor(Color.white); 


        g.setColor(Color.RED); 
        g.drawLine(p.x, p.y, p.x2, p.y2); 

        p.x2 = p.x; 
        p.y2 = p.y; 

      } 

} 

     class Run_JPaint { 

       public static void main(String[] args){ 

        JPaint P = new JPaint(); 

        P.setVisible(true); 

       } 
      } 

답변

0

당신은 아마 다음 코드 줄 제거 할 것 : 여기

는 내가 지금까지 무엇을 가지고 super.paintComponent (g)을; 을 PaintPanel 클래스 내부에서 가져옵니다. 그렇지 않으면 각 그리기 명령에 GUI가 화면을 다시 설정합니다.

행운을 빌어 요!

+0

정말 고마워요. 내가 필요한 것입니다. 나는 당신의 대답을지지 하겠지만 아직 그 담당자는 없습니다. 다시 감사합니다 – Jonathan