首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恒重涂问题

恒重涂问题
EN

Stack Overflow用户
提问于 2013-12-20 14:58:39
回答 1查看 210关注 0票数 0

背景:我正在制作一个多人游戏“野餐”或类似于“画东西”。

问题:当我徒手画时,它不断地调用repaint()。当我按下该按钮并单击jpanel时,该按钮将在jpanel上重新绘制或重新绘制。

代码:

代码语言:javascript
复制
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后发生的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-20 15:54:35

代码语言:javascript
复制
super.paintComponent's'(g);

看来你有个打字错误。您不需要paintComponent(.)中的"s“;

代码语言:javascript
复制
c.validate();
c.repaint();

另外,您不需要以上两行。当您使框架可见时,框架将被重新验证和绘制。只有在从可见的GUI中添加/移除组件时,才会使用remove()和remove()方法。

编辑:

它只显示应用程序上的一个点。

如果您想要进行增量绘制,请查看定制绘画方法,例如两种常见的方法:

  1. 使用列表跟踪要绘制的所有线条。
  2. 直接画到BufferedImage上。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20706377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档