2012-10-17 94 views
0

我创建了一个java选项卡式窗格。在标签窗格中,我创建了一个名为Video的选项卡。我希望每当我点击视频标签时,视频就会自动在标签面板上播放。我可以这样做吗?如果是,请告诉我如何去做。将视频帧添加到JTabbed窗格

回答

0

使用JTabbedPanegetModel()的类型SingleSelectionModel,添加一个ChangeListener到模型,您将得到一个事件,当选项卡已被选中。

0

编辑:你的意思是,它会自动运行W/O任何按钮按下,然后使用JTabbedPanegetModel()SingleSelectionModel类型,添加ChangeListener到模型中,你会得到一个事件,当选择一个标签。
如果你的意思是它应该在小选项卡内运行,也许你可以运行一个Thread来显示IconImages的帧。

+1

考虑修改您的第一个答案,而不是张贴的新的... – kleopatra

+0

好吧,我想这样做,但 - 错误 - 这发生了。 (所以我只是再次编辑,并添加了单词编辑:) – Mordechai

2

您必须添加一个ChangeListenerJTabbedPane组件和覆盖stateChanged方法:

tabbedPane.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent e) { 
      if (e.getSource() instanceof JTabbedPane) { 
       JTabbedPane pane = (JTabbedPane) e.getSource(); 
       if (pane.getSelectedIndex() == 2) { 

        // start playing the media clip in tab 2 
        mediaPlayer.start(); 

       } 
      } 
     } 
    }); 

这是一个完整的,工作代码:

package tabvideo; 

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.GridLayout; 
import java.awt.event.KeyEvent; 
import java.io.File; 
import java.io.IOException; 
import java.net.URL; 
import javax.swing.ImageIcon; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 
import javax.media.CannotRealizeException; 
import javax.media.NoPlayerException; 
import javax.media.Player; 
import javax.media.Manager; 

public class TabbedPaneVideoDemo extends JPanel { 

    Player mediaPlayer = null; 

    public TabbedPaneVideoDemo() { 
     super(new GridLayout(1, 1)); 

     JTabbedPane tabbedPane = new JTabbedPane(); 
     ImageIcon icon = createImageIcon("images/icon.gif"); 

     JComponent panel1 = makeTextPanel("Panel #1"); 
     tabbedPane.addTab("Tab 1", icon, panel1, "Does nothing"); 
     tabbedPane.setMnemonicAt(0, KeyEvent.VK_1); 

     JComponent panel2 = makeTextPanel("Panel #2"); 
     tabbedPane.addTab("Tab 2", icon, panel2, "Does twice as much nothing"); 
     tabbedPane.setMnemonicAt(1, KeyEvent.VK_2); 

     JComponent panel3 = makeTextPanel("Panel #3"); 
     tabbedPane.addTab("Tab 3", icon, panel3, "Still does nothing"); 
     tabbedPane.setMnemonicAt(2, KeyEvent.VK_3); 

     JComponent panel4 = makeVideoPanel("somevideo.avi"); 
     tabbedPane.addTab("Tab 4", icon, panel4, "Playes video!"); 
     tabbedPane.setMnemonicAt(3, KeyEvent.VK_4); 

     tabbedPane.addChangeListener(new ChangeListener() { 

      @Override 
      public void stateChanged(ChangeEvent e) { 
       if (e.getSource() instanceof JTabbedPane) { 
        JTabbedPane pane = (JTabbedPane) e.getSource(); 
        if (pane.getSelectedIndex() == 2) { 

         // start playing the media clip in tab 2 
         mediaPlayer.start(); 

        } 
       } 
      } 
     }); 

     // Add the tabbed pane to this panel. 
     add(tabbedPane); 

     // The following line enables to use scrolling tabs. 
     tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
    } 

    protected JPanel makeVideoPanel(String filename) { 
     JPanel panel = new JPanel(false); 

     panel.setLayout(new BorderLayout()); // use a BorderLayout 

     // Use lightweight components for Swing compatibility 
     Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); 

     try { 

      URL mediaURL = new File(filename).toURI().toURL(); 

      // create a player to play the media specified in the URL 
      mediaPlayer = Manager.createRealizedPlayer(mediaURL); 

      // get the components for the video and the playback controls 
      Component video = mediaPlayer.getVisualComponent(); 
      Component controls = mediaPlayer.getControlPanelComponent(); 

      if (video != null) 
       panel.add(video, BorderLayout.CENTER); // add video component 

      if (controls != null) 
       panel.add(controls, BorderLayout.SOUTH); // add controls 

     } // end try 
     catch (NoPlayerException noPlayerException) { 
      System.err.println("No media player found"); 
     } // end catch 
     catch (CannotRealizeException cannotRealizeException) { 
      System.err.println("Could not realize media player"); 
     } // end catch 
     catch (IOException iOException) { 
      System.err.println("Error reading from the source"); 
     } // end catch 

     return panel; 
    } // end MediaPanel constructor 

    /** Returns an ImageIcon, or null if the path was invalid. */ 
    protected static ImageIcon createImageIcon(String path) { 
     java.net.URL imgURL = TabbedPaneVideoDemo.class.getResource(path); 
     if (imgURL != null) { 
      return new ImageIcon(imgURL); 
     } else { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
    } 

    protected JComponent makeTextPanel(String text) { 
     JPanel panel = new JPanel(false); 
     JLabel filler = new JLabel(text); 
     filler.setHorizontalAlignment(JLabel.CENTER); 
     panel.setLayout(new GridLayout(1, 1)); 
     panel.add(filler); 
     return panel; 
    } 

    /** 
    * Create the GUI and show it. For thread safety, this method should be 
    * invoked from the event dispatch thread. 
    */ 
    private static void createAndShowGUI() { 
     // Create and set up the window. 
     JFrame frame = new JFrame("TabbedPaneDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // Add content to the window. 
     frame.add(new TabbedPaneVideoDemo(), BorderLayout.CENTER); 

     // Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     // Schedule a job for the event dispatch thread: 
     // creating and showing this application's GUI. 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       // Turn off metal's use of bold fonts 
       UIManager.put("swing.boldMetal", Boolean.FALSE); 
       createAndShowGUI(); 
      } 
     }); 
    } 

}