Java 关于JPanel重新喷漆的问题

Java 关于JPanel重新喷漆的问题,java,swing,Java,Swing,我正在尝试实现放大功能 我现在的问题是:每次单击“放大”,面板上都会出现一个新的缩放图像。但原始图像仍在面板上。因此,我尝试使用重新绘制方法。问题是,我可以看到新图像在屏幕上闪烁,然后消失。我是否以错误的方式使用代码? 当前代码如下所示: 双击以放大: panel_Show.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) {

我正在尝试实现放大功能

我现在的问题是:每次单击“放大”,面板上都会出现一个新的缩放图像。但原始图像仍在面板上。因此,我尝试使用重新绘制方法。问题是,我可以看到新图像在屏幕上闪烁,然后消失。我是否以错误的方式使用代码? 当前代码如下所示:

双击以放大:

    panel_Show.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            // TODO Auto-generated method stub
            int count = arg0.getClickCount();
            if (count == 2 && !arg0.isConsumed()) {
                int x = arg0.getX();
                int y = arg0.getY();
                zoomin(x, y);
            }
        }
放大方法:

    protected void zoomin(int x, int y) {
    if (allowZoomIn && zoomLevel < zoomLimit) {
        zoomLevel = zoomLevel + 1;
        int width = panel_Show.getWidth();
        int height = panel_Show.getHeight();
        centerX = centerX - (width/2 - x)/alpha;
        centerY = centerY - (height/2 - y)/alpha;
        alpha = alpha * zoomLevel;
        paintSpace(zoomLevel);
    }
}
受保护的无效缩放(int x,int y){
如果(允许缩放和缩放级别
画点:

   protected void paintSpace(int level) {
    panel_Show.repaint();
    pointDrawer = (Graphics2D) panel_Show.getGraphics();

    Iterator<Integer> keyIterator = xCordTable.keySet().iterator();
    while (keyIterator.hasNext()) {
        int id = keyIterator.next();
        double xcord = xCordTable.get(id);
        double ycord = yCordTable.get(id);
                    //below is just some logic code to control how to paint points
        int size = freqTable.get(id);
        paintStar(xcord, ycord, Color.BLUE, size * level);
    }
}
protectedvoid paintSpace(内部级别){
面板_Show.repaint();
pointDrawer=(Graphics2D)面板_Show.getGraphics();
迭代器keyIterator=xCordTable.keySet().Iterator();
while(keyIterator.hasNext()){
int id=keyinterator.next();
double xcord=xCordTable.get(id);
double ycord=yCordTable.get(id);
//下面是一些控制如何绘制点的逻辑代码
int size=frektable.get(id);
paintStar(xcord、ycord、Color.BLUE、size*level);
}
}

您必须使用
面板。删除(图像)
删除原始图像。然后,您需要添加一个新图像,然后
repaint()


缩放建议我宁愿使用a并将原始图像安全地保存在一张卡中

如果您正在绘制图形,则必须绘制或
fillRectangle()
以清除面板上需要绘制新对象的空间。但是按照卡片的布局会更好。