Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мигание зкладки в JTabbedPane, пытаюсь реализовать, помогите советом 
V
    Опции темы
filipp76
Дата 15.5.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 1



Вот пытаюсь реализовать таким методом, просто скрывать панельку в закладке и отображать, но чтот не работает. Она исчезает и все.
Код

import javax.swing.JPanel;

public class clBlickTab implements Runnable {
private int BlickFlag;//номер закладки которую нужно заставить мигать    
    
    public clBlickTab(int Blickflag) {
        BlickFlag=Blickflag;
    }
    
    public void run()
    {
     for(;;){   
      ((JPanel)jMainFrm.jTab.getTabComponentAt(BlickFlag)).setVisible(false);
      
         try{
         Thread.sleep(1000);
         }catch(InterruptedException e){} 
      
      ((JPanel)jMainFrm.jTab.getTabComponentAt(BlickFlag)).setVisible(true);
      
       if(jMainFrm.jTab.getSelectedIndex()==BlickFlag){
        return;
       }
      
     }     
    }
    
}

Но такой вариант не работает. Если убираю Thread.sleep(1000); то оно мигает(очень быстро конечно).Проходил пошагово ошибок не возникает. Подскажите как правильно это реализовать или есть метод попроще.


Это сообщение отредактировал(а) filipp76 - 15.5.2007, 14:08
PM MAIL WWW ICQ   Вверх
powerOn
Дата 15.5.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



можно так попробовать:
Код

import java.awt.Color;
import javax.swing.JTabbedPane;

public class NewJFrame extends javax.swing.JFrame
{
    public NewJFrame()
    {
        initComponents();
    }
    
    private void initComponents()
    {
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTabbedPane1.addTab("tab1", jPanel1);
        jTabbedPane1.addTab("tab2", jPanel2);
        jTabbedPane1.addTab("tab3", jPanel3);

        getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);

        jButton1.setText("Flash Current Tab!");
        jButton1.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                jButton1ActionPerformed(evt);
            }
        });

        getContentPane().add(jButton1, java.awt.BorderLayout.SOUTH);

        pack();
    }
    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                         
    {                                             
        TabFlash.startFlash(jTabbedPane1, jTabbedPane1.getSelectedIndex(), Color.RED, 3, 300);
    }                                        

    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new NewJFrame().setVisible(true);
            }
        });
    }

    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JTabbedPane jTabbedPane1;
}


class TabFlash extends Thread
{
    private JTabbedPane tabbedPane;
    private Color flashColor = Color.ORANGE;
    private int delay = 1000;
    private int count = 3;
    
    public void run()
    {
        if ((tabbedPane != null) || (flashColor != null))
        {
            int selIndex = tabbedPane.getSelectedIndex();
            if (selIndex != -1)
            {
                Color defColor = tabbedPane.getForegroundAt(selIndex);
                for(int i = 0; i < count; i++)
                {
                    tabbedPane.setForegroundAt(selIndex, flashColor);
                    sleep(delay);
                    
                    tabbedPane.setForegroundAt(selIndex, defColor);
                    sleep(delay);
                }
            }
        }
    }
    
    private void sleep(int ms)
    {
        try
        {
            Thread.sleep(ms);
        }
        catch (InterruptedException ex)
        {
            ex.printStackTrace();
        }
    }
    
    public JTabbedPane getTabbedPane()
    {
        return tabbedPane;
    }
    
    public void setTabbedPane(JTabbedPane tabbedPane)
    {
        this.tabbedPane = tabbedPane;
    }
    
    public Color getFlashColor()
    {
        return flashColor;
    }
    
    public void setFlashColor(Color flashColor)
    {
        this.flashColor = flashColor;
    }
    
    public int getDelay()
    {
        return delay;
    }

    public void setDelay(int delay)
    {
        if (delay < 0) delay = 1000;
        this.delay = delay;
    }

    public int getCount()
    {
        return count;
    }

    public void setCount(int count)
    {
        if (count < 0) count = 3;
        this.count = count;
    }
    
    public static void startFlash(JTabbedPane tp, int index, Color c, int count, int delay)
    {
        TabFlash tf = new TabFlash();
        tf.setFlashColor(c);
        tf.setDelay(delay);
        tf.setCount(count);
        tf.setTabbedPane(tp);
        
        tf.start();
    }
}



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
filipp76
Дата 15.5.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 1



powerOn, очень хороший пример, много почерпнул для себя в плане организации кода. Но мне хотелось бы чтоб все таки исчезала и появлялась панелька, ошибок при выполнении нет, мне кажется что она просто не перерисовывается. Может попробовать методы типа
Код

((JPanel)jMainFrm.jTab.getTabComponentAt(BlickFlag)).repaint();

Или это тут не уместно?
PM MAIL WWW ICQ   Вверх
filipp76
Дата 16.5.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 1



Подскажите пожалуйста почему не работает мой вариант?
PM MAIL WWW ICQ   Вверх
powerOn
Дата 16.5.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(filipp76 @  16.5.2007,  13:53 Найти цитируемый пост)
Подскажите пожалуйста почему не работает мой вариант?

Трудно сказать. Нужно запустить и посмотреть.
Впрочем, мигает (если мигает) быстро то это логика не правильная. (Я так предполагаю, поскольку у вас одна задержка между setVisible(true); и setVisible(false);)
 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
filipp76
Дата 16.5.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 1



Цитата(powerOn @  16.5.2007,  13:15 Найти цитируемый пост)
Трудно сказать. Нужно запустить и посмотреть.Впрочем, мигает (если мигает) быстро то это логика не правильная. (Я так предполагаю, поскольку у вас одна задержка между setVisible(true); и setVisible(false);)

Нет, мигает быстро если убрать задержку, мне было просто интересно в чем проблема. Если ставиш задержку то панелька просто исчезает и вновь не появляется. Объясню поподробней,может поможет, на панельке у меня картинка и лэйба, я хочу чтоб они исчезали и появлялись с заданым временем, потому решил скрывать всю панельку и опять показывать. Может надо использовать еще какие-то  методы? Может оно просто не отрисовывается заново? Пошагово проходил код ошибок нет.
PM MAIL WWW ICQ   Вверх
filipp76
Дата 16.5.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 1



Догадался сам smile 


Код

import javax.swing.JPanel;
public class clBlickTab extends Thread {
private int BlickFlag;        
    
    synchronized public void run()
    {
     for(;;){   
      ((JPanel)jMainFrm.jTab.getTabComponentAt(BlickFlag)).setVisible(false);
      
        sleep(2500);
      
      ((JPanel)jMainFrm.jTab.getTabComponentAt(BlickFlag)).setVisible(true);
      
        sleep(2500);
      
     }
      
    }

Теперь работает как надо smile 

Это сообщение отредактировал(а) filipp76 - 16.5.2007, 16:08
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0899 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.