2013-12-09 76 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