Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > видимое перемещение кнопок


Автор: nasan 17.11.2006, 23:17
Привет. 

Проблема такая - на панели имеются 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){
        }
     }   



Автор: LSD 18.11.2006, 01:47
Надо создать отдельный поток, и менять координаты кнопок в нем.

Автор: nasan 18.11.2006, 18:59
я не совсем понял. Зачем надо создать отдельный поток?

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

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

Автор: nasan 18.11.2006, 20:02
Так, это ясно. А можно небольшой пример? Заранее благодарен.

Автор: powerOn 18.11.2006, 20:16
Цитата(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;
  
}

Автор: LSD 18.11.2006, 20:22
Код
  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)
        {
        }
      }
    }
  }

Автор: nasan 20.11.2006, 20:07
Спасибо, теперь все работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)