首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mac版Java 7不重绘

mac版Java 7不重绘
EN

Stack Overflow用户
提问于 2013-10-02 00:54:06
回答 1查看 274关注 0票数 2

我正在尝试创建一个简单的绘图程序,但是每次我调用myDrawingPanel2.reaint()时,该程序只是擦除所绘制的旧点,并将其替换为新位置的一个点。我使用最新版本的Java JDK(u15)和最新版本的Netbeans在MacOSX10.8上运行此程序。我希望程序在不删除前一个点的情况下继续绘制点。

以下是我的申请表的代码:

代码语言:javascript
运行
复制
private void myDrawingPanel2MouseClicked(java.awt.event.MouseEvent evt) {                                             
    myDrawingPanel2.setxC(evt.getX());
    myDrawingPanel2.setyC(evt.getY());

    myDrawingPanel2.repaint();
}                                            

private void myDrawingPanel2MouseDragged(java.awt.event.MouseEvent evt) {                                             
    myDrawingPanel2.setxC(evt.getX());
    myDrawingPanel2.setyC(evt.getY());

    myDrawingPanel2.repaint();
}                                            

private void upActionPerformed(java.awt.event.ActionEvent evt) {                                   
    myDrawingPanel2.setyC(myDrawingPanel2.getyC()-5);

    myDrawingPanel2.repaint();
}                                  

private void downActionPerformed(java.awt.event.ActionEvent evt) {                                     
    myDrawingPanel2.setyC(myDrawingPanel2.getyC()+5);

    myDrawingPanel2.repaint();
}                                    

private void leftActionPerformed(java.awt.event.ActionEvent evt) {                                     
    myDrawingPanel2.setxC(myDrawingPanel2.getxC()-5);

    myDrawingPanel2.repaint();
}                                    

private void rightActionPerformed(java.awt.event.ActionEvent evt) {                                      
    myDrawingPanel2.setxC(myDrawingPanel2.getxC()+5);

    myDrawingPanel2.repaint();
}                                     

private void upKeyPressed(java.awt.event.KeyEvent evt) {                              
    if(evt.getKeyCode() == 38) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()-5);
    }
    if(evt.getKeyCode() == 40) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()+5);
    }
    if(evt.getKeyCode() == 39) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()+5);
    }
    if(evt.getKeyCode() == 37) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()-5);
    }
    myDrawingPanel2.repaint();
}                             

private void leftKeyPressed(java.awt.event.KeyEvent evt) {                                
    if(evt.getKeyCode() == 38) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()-5);
    }
    if(evt.getKeyCode() == 40) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()+5);
    }
    if(evt.getKeyCode() == 39) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()+5);
    }
    if(evt.getKeyCode() == 37) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()-5);
    }
    myDrawingPanel2.repaint();
}                               

private void downKeyPressed(java.awt.event.KeyEvent evt) {                                
    if(evt.getKeyCode() == 38) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()-5);
    }
    if(evt.getKeyCode() == 40) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()+5);
    }
    if(evt.getKeyCode() == 39) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()+5);
    }
    if(evt.getKeyCode() == 37) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()-5);
    }
    myDrawingPanel2.repaint();
}                               

private void rightKeyPressed(java.awt.event.KeyEvent evt) {                                 
    if(evt.getKeyCode() == 38) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()-5);
    }
    if(evt.getKeyCode() == 40) {
        myDrawingPanel2.setyC(myDrawingPanel2.getyC()+5);
    }
    if(evt.getKeyCode() == 39) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()+5);
    }
    if(evt.getKeyCode() == 37) {
        myDrawingPanel2.setxC(myDrawingPanel2.getxC()-5);
    }
    myDrawingPanel2.repaint();
} 

下面是我的JPanel的代码:

代码语言:javascript
运行
复制
package drawingdemo;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;


public class MyDrawingPanel extends JPanel{

int xC = 150;
int yC = 100;
int diameter = 25;

public int getxC() {
    return xC;
}

public void setxC(int xC) {
    this.xC = xC;
}

public int getyC() {
    return yC;
}

public void setyC(int yC) {
    this.yC = yC;
}

public int getDiameter() {
    return diameter;
}

public void setDiameter(int diameter) {
    this.diameter = diameter;
}

@Override
public void paintComponent(Graphics g){

    //super.paintComponent(g);

    g.setColor(Color.RED);
    g.fillOval(xC - (diameter/2), yC - (diameter/2), diameter, diameter);

}

}
EN

回答 1

Stack Overflow用户

发布于 2013-10-02 05:20:53

程序会按照你的指示去做。paintComponent用于绘制整个组件,而您的实现只绘制一个点。如果希望组件显示多个点,则需要提供一个绘制多个点paintComponent实现。这意味着你必须记住所有点的位置。

有一些技巧可以强迫Swing不清除背景,但这些将是杂乱无章的,因为你没有实现正确的语义。屏幕上的可见状态可能会在任何时候丢失,例如,当另一个窗口与您的窗口重叠时,或者用户最小化并恢复该窗口时,或者显示设置发生更改时。因此,您必须提供一个能够还原整个预期显示内容的paintComponent实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19121810

复制
相关文章

相似问题

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