2011-04-20 105 views
1

我用面板和三个按钮编写了一个应用程序。我想用鼠标添加选择这个按钮。我的意思就像我们在桌面上的Windows一样。我按下鼠标左键并随着鼠标的移动,区域选择正在增加。使用Swing绘制选择框

有没有在这个特定的接口或我有它手动调用事件侦听器的适当方法,并在那里绘制透明的矩形?这里是一个图片:

Example Screenshot

所以我有一个问题,当我使用事件鼠标拖动矩形漆,按钮被重新绘制,以便用户看到闪烁的按钮。当我画矩形时,我想要这个按钮不会消失。我认为我需要使用glassPane。这是我的想法。我有一个框架。在框架中,我添加按钮的面板,我需要另一个面板,我会画透明的矩形。我在想,我的按钮不会重新粉刷。你对这个概念有什么看法?或者,也许有人有另一个想法。这是代码:

 @Override 
     public void mousePressed(MouseEvent e) { 
      startPoint=e.getPoint(); 
      setOpaque(true); 

      Graphics2D g2 = (Graphics2D)getGraphics(); 

      Rectangle2D prostokat = new Rectangle2D.Double(); 
      prostokat.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y); 
      g2.setComposite(AlphaComposite.getInstance(rule, alpha)); 
      g2.draw(prostokat); 
      g2.setColor(Color.BLUE); 
      g2.fill(prostokat); 


     } 



     @Override 
     public void mouseDragged(MouseEvent e) { 
      setOpaque(true); 

      Graphics2D g2 = (Graphics2D)getGraphics(); 
      Rectangle2D prostokat = new Rectangle2D.Double(); 

      prostokat.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y); 
      g2.setComposite(AlphaComposite.getInstance(rule, alpha)); 
      g2.draw(prostokat); 
      g2.setColor(Color.BLUE); 
      g2.fill(prostokat); 
      paintComponent(g2); 


     } 

     int rule = AlphaComposite.SRC_OVER; 
     float alpha = 0.85F; 




    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() 
     { 
public void run() 
      { 
       zaznacz rys = new zaznacz(); 
       JFrame frame = new JFrame(); 
       JButton Button = new JButton("1"); 
       JPanel panel = new JPanel(); 



       panel.add(Button); 
       rys.add(panel); 
       frame.setSize(400,300); 
       frame.setVisible(true); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       panel.setOpaque(false); 

       frame.add(rys); 


      } 
     }); 
    } 

} 

我知道代码是不完美的,但几乎工作。我有一个小问题。当我按下鼠标按钮并拖动我的按钮disapear。 enter image description here enter image description here

我不需要像“你的代码错了”这样的提示。我知道这一点,我想有人帮助我,我必须纠正。我知道我不应该在mouseEvents中使用paintComponent(),但只有这样我才能绘制透明矩形。或者,也许你可以不知道如何绘制透明的矩形。我尝试尝试,我认为我必须更改mouseDragged方法。因为当我从这个方法中删除代码并且只在一个按钮上绘制矩形时,所有都没关系。但问题是,当我需要通过拖动鼠标绘制矩形。我应该改变油漆,但我不知道如何。任何人都可以帮助我或尝试帮助我?

+1

明确说明您的问题将有所帮助。并将您发布的代码降至最低,以显示您想展示的内容。在这里粘贴一个完整的程序并不是太好,因为大多数人在知道你做了什么之前并不特别想通读一段代码。 – Joey 2011-04-20 08:37:47

+0

我在这里粘贴了完整的程序,因为我认为当人们在他们的计算机上粘贴和执行程序时,清楚地看到我的意思。 – edi233 2011-04-20 08:47:47

+0

你对那些想要帮助你的人有很大的要求。我很少运行在SO上提供的代码,其他许多人也不这样做。人们没有无限的时间,你可以用一个写得很好的问题大大减少他们的努力。目前看起来太像了»这是我想要的,这是我写的。现在为我解决我的代码。“大多数人不会那样做。 – Joey 2011-04-20 08:50:34

回答