Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embed a YouTube video to JFrame?

I've been doing a lot of research and trying to find a guide that can teach me how to correctly embed a YouTube video directly to my JFrame. I've read all of the Google Developers guides on the YouTube API but can't find just what I'm looking to do.

I'm trying to embed a YouTube video straight to the JFrame using an init in my main method. For example:

/**
 * Main
 * @param args
 * @throws IOException
 */
public static void main(String[] args) throws IOException {
    try {
        UIManager.setLookAndFeel(new NimbusLookAndFeel());
    } catch (UnsupportedLookAndFeelException ulafe) {
        Loader loader = new Loader();
        loader.doFrame();
    }
    Start Loader = new Start();
    Loader.setVisible(true);
}

/**
 * Start
 * @throws IOException
 */
public Start() throws IOException {
    super("Ryan's Client Launcher version: '0.0.1'");
    try {
        getContentPane().setBackground(Color.BLACK);
        setBackground(Color.BLACK);

        BufferedImage image39 = ImageIO.read(getClass().getResourceAsStream("\\jaggl\\igs\\39.png"));

        this.setIconImage(image39);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(new Dimension(launcherWidth, launcherHeight));
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setUndecorated(true); 
        getContentPane().setLayout(null);

        initWorldSelectInterface();

    } catch (IOException e) {
        System.out.println(e);
    }
}

Under where I have initiated my world select interface I would like to have "initYouTubeVideo"

I've created a void "initYouTubeVideo" and don't exactly understand how I can just embed the video & only the video. Say I make an update for my game & I make a YouTube video about it. I'd like to feature that video on my JFrame (no comment Section or anything else just simply the YouTube video).

Could someone please give me a guide that I can learn from directly on how to Embed the YouTube video.

For this post I made an example JFrame to help you visually understand what I'm trying to accomplish. Here is the Image:

Image

In the image the red is where I would place the YouTube player & The green is my interfaces. Now again say I made an update in my game & made a youtube video about it. I want to be able to just put the link to the video in & when someone runs the client they can click play & watch the video.

Note: I am using Google's YouTube API

I have looked at the following Guides: Everything about the YouTube API found here: https://developers.google.com/youtube/v3/getting-started

Again All i want is just to add the video to the JFrame so my players can get video updates on the latest game content.

Thank you & Rep to those that can help me.

like image 614
Ryan Avatar asked Dec 07 '13 10:12

Ryan


People also ask

Is JFrame and Swing same?

The class JFrame is an extended version of java. awt. Frame that adds support for the JFC/Swing component architecture.

Is JFrame a GUI?

JFrame class is a type of container which inherits the java. awt. Frame class. JFrame works like the main window where components like labels, buttons, textfields are added to create a GUI.


2 Answers

Here's the way I usualy use to embed YouTube videos into Swing application.

Instead of YouTube API a native browser component is embedded into JPanel using DJ Native Swing:

public class YouTubeViewer {

public static void main(String[] args) {
    NativeInterface.open();
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame = new JFrame("YouTube Viewer");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.getContentPane().add(getBrowserPanel(), BorderLayout.CENTER);
            frame.setSize(800, 600);
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    });
    NativeInterface.runEventPump();
    // don't forget to properly close native components
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        @Override
        public void run() {
            NativeInterface.close();
        }
    }));
}

public static JPanel getBrowserPanel() {
    JPanel webBrowserPanel = new JPanel(new BorderLayout());
    JWebBrowser webBrowser = new JWebBrowser();
    webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
    webBrowser.setBarsVisible(false);
    webBrowser.navigate("https://www.youtube.com/v/b-Cr0EWwaTk?fs=1");
    return webBrowserPanel;
}
}

When running it looks like

enter image description here

The following libraries are necessary to launch an example above:

  • DJNativeSwing.jar
  • DJNativeSwing-SWT.jar
  • swt-4.3-win32-win32-x86.jar (This one is platform dependent)

you can get all of them from a DJ Native Swing download package.

like image 145
Jk1 Avatar answered Oct 07 '22 06:10

Jk1


You can try this code: This code will redirect the click to the browser.

public class YoutubePlay 
{
public static void main(String[] args) throws URISyntaxException {
final URI uri = new URI("http://www.youtube.com/watch?v=qzW6mgfY5X4");
class OpenUrlAction implements ActionListener 
{
  @Override public void actionPerformed(ActionEvent e) {
    open(uri);
  }
}
JFrame frame = new JFrame("Links");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(100, 400);
Container container = frame.getContentPane();
container.setLayout(new GridBagLayout());
JButton button = new JButton();
button.setText("<HTML>Click the <FONT color=\"#000099\"><U>link</U></FONT>");
button.setHorizontalAlignment(SwingConstants.LEFT);
button.setBorderPainted(false);
button.setOpaque(false);
button.setBackground(Color.WHITE);
button.setToolTipText(uri.toString());
button.addActionListener(new OpenUrlAction());
container.add(button);
frame.setVisible(true);
}
private static void open(URI uri) 
{
    if (Desktop.isDesktopSupported()) 
    {
      try 
      {
        Desktop.getDesktop().browse(uri);
      }
      catch (IOException e) 
      { /* TODO: error handling */ }
    }
    else
    { /* TODO: error handling */ }
  }
  }
like image 3
Neo Avatar answered Oct 07 '22 05:10

Neo