gpt4 book ai didi

java - 将视频帧添加到 JTabbedpane

转载 作者:行者123 更新时间:2023-12-02 07:30:54 26 4
gpt4 key购买 nike

我创建了一个 Java 选项卡式 Pane 。在选项卡式 Pane 中,我创建了一个名为“视频”的选项卡。我希望每当我单击视频选项卡时,视频都会自动在选项卡面板本身上播放。我可以这样做吗?如果是,请告诉我该怎么做。

最佳答案

您必须将 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();
}
});
}

}

关于java - 将视频帧添加到 JTabbedpane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12927507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com