2013-12-20 3 views
0

Фон: Я делаю многопользовательскую игру «изобразительного» или подобную «рисовать что-то».Постоянный перекрашивание вопроса

Задача: Когда я рисую начертание его постоянно вызываемого перерисовки(). когда я нажимаю кнопку и нажимаю на jpanel, кнопка перекрашивается или перерисовывается на jpanel.

Код:

public class DrawP extends JPanel implements MouseListener, MouseMotionListener{ 
private int x1; 
private int y1; 
private int cx,cy; 

public DrawP(){ 
    super(); 
    JFrame fr = new JFrame("Test"); 

    JButton btn = new JButton("Test"); 

    fr.setSize(500, 500); 
    Container c = fr.getContentPane(); 
    c.add(btn, BorderLayout.SOUTH); 
    c.add(this); 
    this.addMouseListener(this); 
    this.addMouseMotionListener(this); 
    fr.setVisible(true); 
    c.validate(); 
    c.repaint(); 
} 

public void paintComponent(Graphics g){ 
    super.paintComponents(g); 
    g.drawLine(cx, cy, x1, y1); 
} 
@Override 
public void mouseDragged(MouseEvent e) { 
    x1 = e.getX(); 
    y1 = e.getY(); 
    cx = x1; 
    cy = y1; 
    repaint(); 
} 

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

} 

@Override 
public void mouseClicked(MouseEvent e) { 
    // TODO Auto-generated method stub 
    cx = e.getX(); 
    cy = e.getY(); 
    x1 = cx; 
    y1 = cy; 
    repaint(); 
} 

@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) { 
    // TODO Auto-generated method stub 

} 

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

} 

public static void main (String [] args){ 
    DrawP d = new DrawP(); 

} 
} 

Эта фотография показывает, что происходит после того, как я нажимаю на кнопку и нарисовать: http://imgur.com/o9QCTjF

+2

Извините, но я не понимаю, что вы хотите, и не хотите, чтобы это произошло. Можете ли вы объяснить более четко. –

+0

Это не Java 8, не так ли? –

+0

Я хочу рисовать, как вы можете рисовать на краску. и остановить кнопку от повторного появления в jpanel. – user3123062

ответ

1
super.paintComponent's'(g); 

Похоже, у вас есть опечатка. Вы не хотите «s» в paintComponent (...);

c.validate(); 
c.repaint(); 

Кроме того, вам не нужны указанные выше две линии. Рамка проверяется и окрашивается, когда вы делаете рамку видимой. Единственный раз, когда вы используете методы revalidate() и repaint(), - это когда вы добавляете/удаляете компоненты из видимого GUI.

Edit:

это только показывает точку на применении

Если вы хотите сделать инкрементный картину затем проверить Custom Painting Approaches, например, из двух распространенных способов сделать это:

  1. Используйте список для отслеживания всех линий для рисования
  2. Нарисуйте прямо на буффе eredImage.
+0

«s» позволяет мне рисовать, как вы рисуете на краске с помощью карандаша. Если у меня нет «s», то я не могу рисовать - он показывает только точку на приложении. – user3123062

+0

. Вы не должны использовать paintComponents(), это не так, как Swing был разработан так, как вы можете видеть из проблем, которые вы иметь. См. Править. – camickr

Смежные вопросы