2016-05-11 3 views
0

同じJFrameで2つのJPanelを切り替える間に遅延を追加しようとしています。 両方がループ内の可視性タイプを変更しています。 私ものThread.sleepてみたが、それは事前:)(JPanelスイッチング)2枚のパネルを切り替える時間を秒単位で追加します。

パネルで おかげで動作していない1色が

パネル2色は黒、赤されているあなたは、トリガーにスイングタイマーを使用する必要が

for (int i = 0; i < LENGTH; i++) { 
    panel1.setVisible(true) 
/************************************* 
    here i want to add delay 
**************************************/ 
    panel1.setVisible(false) 
    panel2.setVisible(true); 
    for (int k = 0; k < rSIZE; k++) { 
     tempr[i][k].setBackground(labelsGrid[i][k].getBackground()); 
    } 
} 
+0

[スイングタイマーの使い方](https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html) – MadProgrammer

答えて

0

あなたのUIトグルの間の遅延。ここに簡単な例があります。

package app; 

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 

public class App extends JFrame 
{ 
    private JLabel label; 
    private Timer timer; 
    private int counter = 10; // the duration 
    private int delay = 1000; // every 1 second 
    private static final long serialVersionUID = 1L; 

    public App() 
    { 
     super("App"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     label = new JLabel("Wait for " + counter + " sec", JLabel.CENTER); 
     JPanel contentPane = (JPanel) getContentPane(); 
     contentPane.add(label, BorderLayout.CENTER); 
     contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     pack(); 

     ActionListener action = new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent event) 
      { 
       if(counter == 0) 
       { 
        timer.stop(); 
        label.setText("The time is up!"); 
       } 
       else 
       { 
        label.setText("Wait for " + counter + " sec"); 
        counter--; 
       } 
      } 
     }; 

     timer = new Timer(delay, action); 
     timer.setInitialDelay(0); 
     timer.start(); 

     setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new App(); 
      } 
     }); 
    } 
} 

このシンプルなタイマーは、カウンタ値をデクリメントした後、毎秒及び更新ラベルをActionListenerの引き金となります。

関連する問題