java - 使用 Swing 绘制选择框

标签 java swing awt

我编写了一个带有面板和三个按钮的应用程序。我想使用鼠标添加选择此按钮。我的意思是就像我们在桌面上的 Windows 中一样。我按下鼠标左键,随着鼠标的移动,选择的区域不断扩大。

其中是否有特定的接口(interface),或者我是否手动调用事件监听器的适当方法并绘制透明矩形?这是一张图片:

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);


            }
        });
    }

}

我知道代码并不完美,但几乎可以工作。我有一个小问题。当我按下鼠标按钮并拖动按钮时,按钮就会消失。 enter image description here enter image description here

我不需要像“你的代码是错误的”这样的建议。我知道这一点,我希望有人帮助我纠正我必须纠正的问题。我知道我不应该在 mouseEvents 中使用paintComponent(),但只有这样我才能绘制透明矩形。或者也许您可以了解如何绘制透明矩形。我尝试再尝试,我认为我必须更改 mouseDragged 方法。因为当我从此方法中删除代码并仅在按钮上绘制矩形时,一切都可以。但问题是当我需要通过拖动鼠标绘制矩形时。我应该换油漆,但我不知道怎么换。任何人都可以帮助我或尝试帮助我吗?

最佳答案

我认为该代码在这种形式(主)中不起作用,也许有人会为您调试它,请遵循 Joey 的建议

嗯嗯,很冒犯的话,无论如何都遵循(Oracle Java教程)http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

关于java - 使用 Swing 绘制选择框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727578/

相关文章:

java - android 媒体播放器中的完成监听器

java - Swing 窗口监听器线程问题

java - 刷新 JTable 的 setCellEditor

java - getText()之后如何打印到文件

java - 线程 "main"java.lang.ArrayIndexOutOfBoundsException : 8 中的异常

java - (Java) 如何对对象数组进行排序,并断开两个对象之间的联系?

java - 如何获取 JTable 内的 JComboBox 值?

java - 使图形对象移动

java - 嵌套循环继续java

java - 何时使用内部类而不是解耦设计?