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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> видимое перемещение кнопок 
V
    Опции темы
nasan
Дата 17.11.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет. 

Проблема такая - на панели имеются 4 кнопки. При нажатие первой 3 и 4 начинают двигаться по горизонтали от границы до границы панели. При нажатии 2 кнопки 3 и 4 перестают двигаться. Так вот, не виден сам процесс перемещения кнопок. Результат виден только после завершения цикла.

Метод в Thread.
Код

public void go(JButton b,int q, int w)
    {
        for (int i = 0; i < 5; i++)
        {
            
            b.setLocation(q,w);
            q = q + 10;                       
            try 
          {
            Thread.sleep(300);
        }
        catch(Exception e){
        }
     }   



PM MAIL   Вверх
LSD
Дата 18.11.2006, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Надо создать отдельный поток, и менять координаты кнопок в нем.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
nasan
Дата 18.11.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я не совсем понял. Зачем надо создать отдельный поток?
PM MAIL   Вверх
powerOn
Дата 18.11.2006, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(nasan @  18.11.2006,  18:59 Найти цитируемый пост)
Зачем надо создать отдельный поток? 

Затем, что если ты будешь выполнять код из потока рассылки сообщений, то он остановится (поток рассылки сообщений) пока твой код полностью не будет выполнен. А следовательно не будет перерисовки. Так что на экране ты увидишь лишь последний кадр своей анимации.


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

PM MAIL   Вверх
nasan
Дата 18.11.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так, это ясно. А можно небольшой пример? Заранее благодарен.
PM MAIL   Вверх
powerOn
Дата 18.11.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(nasan @  18.11.2006,  20:02 Найти цитируемый пост)
А можно небольшой пример?

Чего пример? Работы с потоками? Пожалуйста:

Код

public class NewJFrame extends javax.swing.JFrame implements Runnable {

    public NewJFrame() {
        initComponents();
    }
                       
    private void initComponents() {
        jButton1 = new javax.swing.JButton();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        getContentPane().add(jButton1);
        jButton1.setBounds(30, 30, 81, 26);

        pack();
    }                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        new Thread(this).start();
    }                                        

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    
    public void run() {
        for(int i = 0; i < (getWidth() - jButton1.getWidth()); i++) {
            jButton1.setLocation(jButton1.getX(), i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    }
                  
    private javax.swing.JButton jButton1;
  
}



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

PM MAIL   Вверх
LSD
Дата 18.11.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Код
  private static class ComponentMover extends Thread
  {
    private int x, y;
    private Component component;
    private Container parent;

    public ComponentMover(int x, int y, Component component)
    {
      this.x = x;
      this.y = y;
      this.component = component;
      parent = component.getParent();
    }

    public void run()
    {
      for(int i = 0; i < 5; i++)
      {
        x += 5;
        y += 5;
        Runnable r = new Runnable()
        {
          public void run()
          {
            component.setLocation(x, y);
            parent.validate();
            parent.repaint();
          }
        };
        SwingUtilities.invokeLater(r);
        try
        {
          Thread.sleep(300);
        }
        catch(Exception e)
        {
        }
      }
    }
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
nasan
Дата 20.11.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, теперь все работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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