2015-05-11 3 views
0

Допустим, у меня есть 2 GUI панели A и BКак сделать компонент панели Java GUI спящим?

В панели А, у меня есть JTextArea, что вы можете ввести String, и JButton, что если она нажата, он добавляет строку внутри jTextArrea на JTextField, что находится внутри панель в

что я хочу сделать, это струнное добавить на панель B после ожидания 2 секунды без Нити Отправляясь спать

Он должен быть в состоянии ввести другую строку в jTextArea в течение периода ожидания

Как мне это сделать без использования Thread.sleep()?

+0

Либо использовать Swing 'Timer' или' SwingWorker' – MadProgrammer

+0

как? я это делаю? @MadProgrammer – LookInsideThe

+0

Вы можете начать с просмотра [Concurrency in Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/), [Как использовать таймеры Swing] (http: // docs .oracle.com/javase/tutorial/uiswing/misc/timer.html) и [Worker Threads and SwingWorker] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) – MadProgrammer

ответ

1

Начните с Concurrency in Swing, How to use Swing Timers и Worker Threads and SwingWorker, чтобы понять проблемы и возможные решения.

Если вы действительно не хотите использовать Thread#sleep (которые вы можете использовать с SwingWorker), качелями Timer является, вероятно, лучшим решением. Он позволяет настроить обратный вызов после заданной задержки (вы также можете повторить обратный вызов, но в этом случае нам это нужно только один раз).

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.Timer; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JTextField field; 
     private JTextArea ta1; 
     private JTextArea ta2; 
     private JButton btn; 

     private Timer timer; 

     public TestPane() { 
      JPanel panelA = new JPanel(new BorderLayout()); 
      JPanel panelB = new JPanel(new BorderLayout()); 

      setLayout(new GridLayout(1, 2)); 

      add(panelA); 
      add(panelB); 

      field = new JTextField(10); 
      ta1 = new JTextArea(10, 20); 
      ta1.setEditable(false); 
      btn = new JButton("Add"); 

      panelA.add(field, BorderLayout.NORTH); 
      panelA.add(new JScrollPane(ta1)); 
      panelA.add(btn, BorderLayout.SOUTH); 

      ta2 = new JTextArea(10, 20); 
      ta2.setEditable(false); 
      panelB.add(new JScrollPane(ta2)); 

      ActionListener startListener = new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        ta1.append(field.getText() + "\n"); 
        if (!timer.isRunning()) { 
         field.setEnabled(false); 
         btn.setEnabled(false); 
         timer.start(); 
        } 
       } 
      }; 

      field.addActionListener(startListener); 
      btn.addActionListener(startListener); 

      timer = new Timer(2000, new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        ta2.append(field.getText() + "\n"); 
        field.setEnabled(true); 
        btn.setEnabled(true); 
        field.setText(null); 
        field.requestFocusInWindow(); 
       } 
      }); 
      timer.setRepeats(false); 
     } 

    } 

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