2013-12-09 54 views
0

我有一个应用程序,在更改后会出现一个绿色复选标记,表示更改成功。该应用程序有几个可能的变化,我希望能够让复选标记在2.5秒后消失。我已经尝试了几件事情,如:使项目消失

panel.add(checkMark); 
checkMark.setVisible(true); 
panel.remove(checkMark); 
checkMark.setVisible(false); 

似乎没有任何工作。我添加了一个timer电话,然后是checkMark.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(); 
      } 
+2

请问您的200多行JDBC代码与这个问题有什么关系?另一方面,你甚至没有用'Timer'来显示你的尝试,这是唯一重要的事情。 –

+0

计时器的尝试是200行代码的一部分。 – DarthOpto

+0

我的观点正是:我甚至无法找到它。 –

回答

0

添加了panel.repaint();之后我的checkMark.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(); 
      } 
5
panel.add(checkMark); 
checkMark.setVisible(true); 
panel.remove(checkMark); 
checkMark.setVisible(false); 

当您添加/从可视GUI删除组件的基本代码是:

panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

默认情况下,所有组件有一个大小为零,所以没有什么画,直到你做revalidate()调用布局管理器给组件一个大小。

所以你会使用像上面的代码来显示组件,然后你会开始你的计时器,当计时器启动时,你会删除它。

+0

重点是它不会将其删除。 – DarthOpto

+0

删除复选框后,仍然需要重新验证面板()。发布你的'SSCCE'来证明你的问题。 – camickr