我创建了一个java选项卡式窗格。在标签窗格中,我创建了一个名为Video的选项卡。我希望每当我点击视频标签时,视频就会自动在标签面板上播放。我可以这样做吗?如果是,请告诉我如何去做。将视频帧添加到JTabbed窗格
0
A
回答
0
使用JTabbedPane
getModel()
的类型SingleSelectionModel
,添加一个ChangeListener
到模型,您将得到一个事件,当选项卡已被选中。
0
编辑:你的意思是,它会自动运行W/O任何按钮按下,然后使用JTabbedPane
getModel()
SingleSelectionModel
类型,添加ChangeListener
到模型中,你会得到一个事件,当选择一个标签。
如果你的意思是它应该在小选项卡内运行,也许你可以运行一个Thread
来显示IconImages
的帧。
2
您必须添加一个ChangeListener
您JTabbedPane
组件和覆盖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();
}
});
}
}
相关问题
- 1. .gif图像不会将其添加到JTabbed窗格
- 2. 在调用setComponentAt()后无法将面板添加到jtabbed窗格()
- 3. 将图标JLabel图标添加到JTabbed窗格侧
- 4. 推广将视频添加到视频
- 5. 将海报帧添加到已加载的视频
- 6. 将视频添加到Unity3d
- 7. AVFoundation:将文本添加到CMSampleBufferRef视频帧
- 8. 如何使用ffmpeg将文本添加到视频帧?
- 9. OpenCV将帧添加到现有视频(.avi)文件?
- 10. 如何将音频添加到视频?
- 11. 将音频添加到视频文件
- 12. 将音频添加到ffmpeg视频流
- 13. Jtabbed窗格两侧的选项卡
- 14. 将值添加到表格并将其添加到主窗体
- 15. 将视频帧作为位图绘制到MFC窗口
- 16. 将视频添加到iPad模拟器
- 17. 将YouTube视频添加到Bootstrap主题
- 18. 将视频添加到新页面
- 19. 使用SharePoint将视频添加到YouTube
- 20. 将抖动图标添加到视频
- 21. 将视频添加到UIActivityViewController IOS7
- 22. 将文本添加到视频,Opencv
- 23. 连续将图片添加到视频
- 24. 将视频添加到网站
- 25. 将评论添加到youtube视频
- 26. Mlt Melt将音轨添加到视频
- 27. 使用javascript将视频添加到div
- 28. 如何将视频添加到灯箱?
- 29. 将视频添加到应用程序
- 30. 将图像添加到视频
考虑修改您的第一个答案,而不是张贴的新的... – kleopatra
好吧,我想这样做,但 - 错误 - 这发生了。 (所以我只是再次编辑,并添加了单词编辑:) – Mordechai