2013-12-09 1 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, связанные с вопросом? С другой стороны, вы даже не показали свою попытку с помощью «Таймера», и это единственное, что имеет значение. –

+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

 Смежные вопросы

  • Нет связанных вопросов^_^