Java 使物品消失

Java 使物品消失,java,swing,concurrency,jbutton,event-dispatch-thread,Java,Swing,Concurrency,Jbutton,Event Dispatch Thread,我有一个应用程序,在进行更改后,会出现一个绿色复选标记,表示更改成功。该应用程序有几个可能的变化,可以作出,我想能够有检查标记消失后2.5秒。我尝试过以下几种方法: panel.add(checkMark); checkMark.setVisible(true); panel.remove(checkMark); checkMark.setVisible(false); 似乎什么都没用。我添加了一个计时器调用,然后是一个复选标记.setVisible(false),似乎没有任何帮助 有人能指出

我有一个应用程序,在进行更改后,会出现一个绿色复选标记,表示更改成功。该应用程序有几个可能的变化,可以作出,我想能够有检查标记消失后2.5秒。我尝试过以下几种方法:

panel.add(checkMark);
checkMark.setVisible(true);
panel.remove(checkMark);
checkMark.setVisible(false);
似乎什么都没用。我添加了一个
计时器
调用,然后是一个
复选标记.setVisible(false)
,似乎没有任何帮助

有人能指出我做错了什么吗?下面是我的代码:

//Create Change Role Button
    final JButton changeRoleBtn = new JButton("Change Role");
    changeRoleBtn.setBounds(50, 500, 150, 30);
    changeRoleBtn.setToolTipText("Changes the role of the User");
    changeRoleBtn.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            //Create Success Image
            final ImageIcon i1 = new ImageIcon("/Users/vhaislsalisc/Documents/workspace/Role_Switcher/greenCheck.png");
            final JLabel checkMark = new JLabel(i1);
            checkMark.isOptimizedDrawingEnabled();
            i1.paintIcon(changeRoleBtn, getGraphics(), 400,25); 
            checkMark.setVisible(true);
            try
            {
                timer = new Timer(2000, new ActionListener()
                {

                    @Override
                    public void actionPerformed(ActionEvent e) 
                    {
                        checkMark.setVisible(false);
                        timer.stop();

                    }
                });
                timer.start();

            }
            catch(Exception e5)
            {
                e5.printStackTrace();
                timer.stop();
            }
        }

    });
这是关于定时器的一点。另一个代码是相关的,因为它包括我对图形的声明以及如何调用和使用它

try
            {
                timer = new Timer(2000, new ActionListener()
                {

                    @Override
                    public void actionPerformed(ActionEvent e) 
                    {
                        checkMark.setVisible(false);
                        timer.stop();

                    }
                });
                timer.start();

            }
            catch(Exception e5)
            {
                e5.printStackTrace();
                timer.stop();
            }
从可见GUI添加/删除组件时,基本代码为:

panel.add(...);
panel.revalidate();
panel.repaint();
默认情况下,所有组件的大小都为零,因此在执行revalidate()之前,没有任何可绘制的内容,revalidate()调用布局管理器为组件指定大小

因此,您可以使用上面的代码来显示组件,然后启动计时器,当计时器启动时,您将删除它

从可见GUI添加/删除组件时,基本代码为:

panel.add(...);
panel.revalidate();
panel.repaint();
默认情况下,所有组件的大小都为零,因此在执行revalidate()之前,没有任何可绘制的内容,revalidate()调用布局管理器为组件指定大小

因此,您可以使用上面的代码来显示组件,然后启动计时器,当计时器启动时,您可以将其删除。

添加了
panel.repaint()在我的
复选标记.setVisible(false)
之后,它就像一个符咒

try
            {
                timer = new Timer(1000, new ActionListener()
                {

                    @Override
                    public void actionPerformed(ActionEvent e) 
                    {
                        checkMark.setVisible(false);
                        panel.repaint();
                        timer.stop();

                    }
                });
                timer.start();

            }
            catch(Exception e5)
            {
                e5.printStackTrace();
                timer.stop();
            }
添加了
panel.repaint()在我的
复选标记.setVisible(false)
之后,它就像一个符咒

try
            {
                timer = new Timer(1000, new ActionListener()
                {

                    @Override
                    public void actionPerformed(ActionEvent e) 
                    {
                        checkMark.setVisible(false);
                        panel.repaint();
                        timer.stop();

                    }
                });
                timer.start();

            }
            catch(Exception e5)
            {
                e5.printStackTrace();
                timer.stop();
            }

请问,您的200多行JDBC代码与这个问题有什么关系?另一方面,你甚至还没有展示你使用
定时器的尝试,这是唯一重要的事情。使用定时器的尝试是200行代码的一部分。我的意思是:我甚至找不到它。@MarkoTopolnik它在最底部为了更快地获得更好的帮助,请发布一条消息,200多行JDBC代码与这个问题有什么关系?另一方面,你甚至还没有展示你使用
定时器的尝试,这是唯一重要的事情。使用定时器的尝试是200行代码的一部分。我的观点是:我甚至找不到它。@MarkoTopolnik它在最底部为了更快地获得更好的帮助,发布一条消息。你仍然需要重新验证()删除复选框后,将显示面板。张贴演示问题的
SSCCE
。删除复选框后,仍需重新验证()面板。张贴您的
SSCCE
,展示您的问题。