Note that there are some explanatory texts on larger screens.

plurals
  1. PODrawing a selection box using Swing
    primarykey
    data
    text
    <p>I have written an application with a panel and three buttons. I want to add selection this buttons using the mouse. I mean like we have in Windows on the Desktop. I press the left mouse button and with the movement of the mouse the area selection is growing. </p> <p>Is there a specific interface in this or do I have it manually call the appropriate methods for event listeners and there draw transparent rectangle? Here is a picture:</p> <p><img src="https://i.stack.imgur.com/CItpD.jpg" alt="Example Screenshot"></p> <p>So I have a problem when I paint rectangle using event mouse-dragged, button is repainting so user see blinking button. I want to this button don't disapear when I paint rectangle. I think that I need to use glassPane. This is my conception. I have a frame. In frame I add panel with button and I need another panel where I will paint transparent rectangle. I am thinking then my button will not be still repainting. What do you think about this conception. Or maybe someone have another idea. This is code:</p> <pre><code> @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); } }); } } </code></pre> <p>I know that code is no perfect but almost work. I have a little problem. When I press the mousebutton and dragging my button disapear. <img src="https://i.stack.imgur.com/Ppmb3.jpg" alt="enter image description here"> <img src="https://i.stack.imgur.com/Y9teM.jpg" alt="enter image description here"></p> <p>I don't need advise like "your code is wrong". I know that and I want to somebody help me what I must correct. I know that I shouldn't use paintComponent() in mouseEvents but only that way I can paint transparent rectangle. Or maybe you can othet idea how I can draw transparent rectangle. I try and try and I think that i must change mouseDragged method. because when I delete code from this method and only draw rectangle over a button all is ok. But problem is when I need draw rectangle by dragging mouse. I should change paint but I don't have idea how. Anyone can help me or try help me?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload