在屏幕上绘制一个矩形作为"区域选择"工具(Java)

时间:2015-08-23 01:00:03

标签: java graphics paint rectangles artifacts

我希望我的程序用户能够突出显示JFrame上的某个区域,以便在屏幕上选择一组项目。我在下面发布的代码有效,但它非常不稳定,每次JFrame重新渲染时都会变成一个眼睛。这是我所谈论的图像:http://i1065.photobucket.com/albums/u400/mfgravesjr/choppy%20draw%20rectangle_zpsspqsqnyf.png

enter image description here 也许这里有人建议改进我的代码?

这是MouseMotionListener中的mouseDragged方法:

     public void mouseDragged(MouseEvent me)
     {
        if(groupingTerr&&me.getSource()==background)
        {
           endPoint = MouseInfo.getPointerInfo().getLocation();
           topLeftRect = new Point(Math.min(startPoint.x,endPoint.x),Math.min(startPoint.y,endPoint.y));
           bottomRightRect = new Point(Math.max(startPoint.x,endPoint.x),Math.max(startPoint.y,endPoint.y));
           for(Point p:map.territoryPoints)
           {
              if(p.x>topLeftRect.x&&p.x<bottomRightRect.x&&p.y>topLeftRect.y&&p.y<bottomRightRect.y)img.getGraphics().drawImage(selectedIco,p.x-selectedIco.getWidth()/2,p.y-selectedIco.getHeight()/2,null);
              else img.getGraphics().drawImage(defaultIco,p.x-defaultIco.getWidth()/2,p.y-defaultIco.getHeight()/2,null);
           }
           background.repaint();
        }
     }

这是私有覆盖的JFrame类

  private static class DrawableJFrame extends JFrame
  {
     @Override
     public void paint(Graphics g)
     {
        super.paint(g);
        g.setColor(new Color(0,0,0,100));
        g.drawRect(topLeftRect.x,topLeftRect.y,bottomRightRect.x-topLeftRect.x,bottomRightRect.y-topLeftRect.y);
        g.setColor(new Color(200,10,10,100));
        g.fillRect(topLeftRect.x,topLeftRect.y,bottomRightRect.x-topLeftRect.x,bottomRightRect.y-topLeftRect.y);
     }
  }

图像是原创作品。请不要使用它。

0 个答案:

没有答案