2014-05-21 5 views
0

GUI를 다시 칠하는 데 문제가 있습니다. 내 중앙 요소에 브러시와 같은 그림을 그리기를 원하지만, 마우스를 끌 때 GUI의 모든 요소가 내 중앙 요소에 인쇄됩니다. 문제를 해결하는 방법에 대해 알고 있습니까?Java의 repaint() GUI 문제

나는 이미지를 게시 할 수 없습니다, 그래서 링크는 사진에 있습니다 : http://imgur.com/a/P3aYC

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

public class PunsClient extends JFrame { 

    //GUI 
    private JButton polacz, rozlacz; 
    private JPanel topPanel; 
    private Painter painter; 
    //Klient 
    private String nazwaSerwera = "localhost"; 
    private Klient watekKlienta; 
    private PunsClient instancjaKlienta; 
    private Puns serwer; 
    private ClientImpl klient; 

    public PunsClient() { 
     super("Klient"); 
     instancjaKlienta = this; 
     setSize(700, 500); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new BorderLayout()); 
     topPanel = new JPanel(new FlowLayout()); 
     painter = new Painter(); 
     polacz = new JButton("Połącz"); 
     rozlacz = new JButton("Rozłącz"); 
     rozlacz.setEnabled(false); 


     addWindowListener(new WindowAdapter() { 

      public void windowClosing(WindowEvent e) { 
       rozlacz.doClick(); 
       setVisible(false); 
       System.exit(0); 
      } 
     }); 

     topPanel.add(new JLabel("Serwer RMI: ")); 
     topPanel.add(host); 
     topPanel.add(polacz); 
     topPanel.add(rozlacz); 

     add(topPanel, BorderLayout.NORTH); 
     add(painter, BorderLayout.CENTER); 
     add(wiadomosc, BorderLayout.SOUTH); 
     setVisible(true); 
    } 

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

    } 
} 


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

public class Painter extends JPanel { 

    int xvalue = -10, yvalue = -10; 

    public Painter() { 
     setPreferredSize(new Dimension(400, 400)); 
     addMouseMotionListener(new MouseMotionAdapter() { 

      public void mouseDragged(MouseEvent event) { 
       xvalue = event.getX(); 
       yvalue = event.getY(); 
       repaint(); 
       } 
      }); 
     } 

    public void paint (Graphics g) { 
     g.fillOval(xvalue, yvalue, 10, 10); 
    } 
    } 

답변

1

사용자 정의 그림은 paintComponent(..) 방법이 아닌 paint() 메소드를 재정 의하여 수행된다.

그리고 paintComponent() 메소드의 첫 번째 문으로 super.paintComponent()을 호출해야합니다.

자세한 내용과 예제는 Custom Painting의 스윙 튜토리얼 섹션을 참조하십시오.

또한 증분 채우기를하려면 Custom Painting Approaches을 확인해야합니다. Draw On Image 예제는 아마도 당신이 사용하는 방법 일 것입니다.

+0

위대한 답변, 감사합니다! – user3608388