2014-02-08 3 views
0

я не могу получить эту работу:JLabel слайд-шоу, когда мышь входит кнопка

public void ru() throws InterruptedException { 
    jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/adv/room.jpg"))); 
    setVisible(true); 
    Thread.sleep(400); 
    jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/adv/ROOMS.jpg"))); 
    setVisible(true); 
    Thread.sleep(400); 
    jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/adv/background.jpg"))); 
    setVisible(true); 
} 

private void BtnRoomsMouseEntered(java.awt.event.MouseEvent evt) { 
    try { 
     ru(); 
    } catch (InterruptedException ex) { 
    } 
}    

Любые решения? Я хочу, чтобы jLabel показывал слайд-шоу, когда мышь входит в определенную кнопку и остается такой, пока мышь все еще находится в одной кнопке. Если мышь выйдет из кнопки, jlabel вернется в нулевое состояние. (ничего больше.) Возможно ли это? Пожалуйста помоги. Я также пробовал использовать заявление for, но ничего хорошего. Кстати, я использую netbeans.

ответ

3

Первое, что вам нужно реализовать javax.swing.Timer. Попытка позвонить Thread.sleep() заблокирует Event Dispatch Thread. См. How to use Swing Timers. Вот основной конструкт

Timer(int delay, ActionListener listener) 

где delay время в миллисекундах вы хотите отсроченное и listener будет слушать для TimerActionEvent выстрелил каждые delay миллисекунд.

Так что вы хотите что-то вроде этого

public class MyFrame extends javax.swing.JFrame { 

    private Timer timer = null; 
    ImageIcon[] icons = new ImageIcon[3]; 
    int index = -1; 

    public MyFrame() { 
     initComponents(); 
     icons[0] = new ImageIcon(...); 
     icons[1] = new ImageIcon(...); 
     icons[2] = new ImageIcon(...); 

     timer = new Timer(2000, new ActionListener(){ 
      public void actionPerformed(ActionEvent e) { 
       if (index + 1 > 2) { 
        index = 0; 
        jLabel3.setIcon(icons[index]); 
       } else { 
        index++; 
        jLabel3.setIcon(icons[index]); 
       } 
      } 
     }); 
    } 
} 

Для вашей кнопки, вам нужно использовать mouseEnteredиmouseExited, то вы можете просто позвонить timer.start() или timer.stop()

private void jButton1MouseExited(MouseEvent e) { 
    timer.stop(); 
} 

private void jButton1MouseEntered(MouseEvent e) { 
    timer.start(); 
} 

Если вы не» t знайте, как добавить MouseListener, просто щелкните правой кнопкой мыши на кнопке с проектного вида и выберите Event -> Mouse -> mouseEntered. Сделайте то же самое для mouseExited. Вы должны увидеть указанные выше методы автоматически сгенерированные для вас.


UPDATE

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.GroupLayout; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.Timer; 
import javax.swing.WindowConstants; 

public class ImageViewer extends javax.swing.JFrame { 

    private Timer timer = null; 
    ImageIcon[] icons = new ImageIcon[5]; 
    int index = -1; 

    public ImageViewer() { 
     initComponents(); 
     try { 

      icons[0] = new ImageIcon(new URL("http://www.iconsdb.com/icons/preview/orange/stackoverflow-4-xxl.png")); 
      icons[1] = new ImageIcon(new URL("http://www.iconsdb.com/icons/preview/caribbean-blue/stackoverflow-4-xxl.png")); 
      icons[2] = new ImageIcon(new URL("http://www.iconsdb.com/icons/preview/royal-blue/stackoverflow-4-xxl.png")); 
      icons[3] = new ImageIcon(new URL("http://www.iconsdb.com/icons/preview/moth-green/stackoverflow-4-xxl.png")); 
      icons[4] = new ImageIcon(new URL("http://www.iconsdb.com/icons/preview/soylent-red/stackoverflow-4-xxl.png")); 
     } catch (MalformedURLException ex) { 
      Logger.getLogger(ImageViewer.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     timer = new Timer(1000, new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       if (index + 1 > 4) { 
        index = 0; 
        jLabel1.setIcon(icons[index]); 
       } else { 
        index++; 
        jLabel1.setIcon(icons[index]); 
       } 
      } 
     }); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jButton1 = new JButton(); 
     jLabel1 = new JLabel(); 

     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     jButton1.setText("jButton1"); 
     jButton1.addMouseListener(new MouseAdapter() { 
      public void mouseEntered(MouseEvent evt) { 
       jButton1MouseEntered(evt); 
      } 
      public void mouseExited(MouseEvent evt) { 
       jButton1MouseExited(evt); 
      } 
     }); 

     GroupLayout layout = new GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
      .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jButton1) 
       .addGap(127, 127, 127)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(27, 27, 27) 
       .addComponent(jLabel1, GroupLayout.PREFERRED_SIZE, 285, GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(29, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
      .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addGap(22, 22, 22) 
       .addComponent(jLabel1, GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE) 
       .addGap(18, 18, 18) 
       .addComponent(jButton1) 
       .addGap(16, 16, 16)) 
     ); 

     pack(); 
    }// </editor-fold>       

    private void jButton1MouseEntered(MouseEvent evt) {          
     timer.start(); 
    }          

    private void jButton1MouseExited(MouseEvent evt) {          
     timer.stop(); 
    }          

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new ImageViewer().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private JButton jButton1; 
    private JLabel jLabel1; 
    // End of variables declaration     
} 
+0

Я сейчас нахожусь сейчас. Однако, что я должен поставить на 'ImageIcon (..)?' – user3260589

+0

Кстати, спасибо peeskillet. Ты спасаешь мою задницу каждый раз, когда у меня возникает вопрос. : D – user3260589

+0

Вы _serious_? У вас есть ответ прямо в _front of you_! –

0

Вы хотите добавить MouseAdapter к JLabel и использовать его mouseEntered() и mouseExited() следующим образом:

 jLabel3.addMouseListener(new MouseAdapter() { 

        @Override 
        public void mouseEntered(java.awt.event.MouseEvent evt) {  
        try { 
         jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/adv/room.jpg"))); 
         setVisible(true); 
         Thread.sleep(400); 
         jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/adv/ROOMS.jpg"))); 
         setVisible(true); 
         Thread.sleep(400); 
         jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/adv/background.jpg"))); 
         setVisible(true); 
        } catch(InterruptedException e) { 

        } 

        @Override 
        public void mouseExited(java.awt.event.MouseEvent evt) { 
         //whatever you mean by "null state" 
        } 
       }); 
+0

Где я могу положить, что? – user3260589

+0

Нужно, конечно, иметь доступ к jLabel3, поэтому, где бы вы обычно ни добавляли слушателя. Например, сделайте это в методе ru(), вместо установки значков и т. Д. –

+0

Err .. Нравится этот 'public void ru() {' 'jLabel3.addMouselistener (newMouseAdapter() {@ ....... ...}); } ' – user3260589

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