package com.timvisee.minecraftrunner; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Desktop; import java.awt.Dimension; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.event.HyperlinkEvent.EventType; public class NewsFrame extends JFrame implements HyperlinkListener { private static final long serialVersionUID = -4911040003703939979L; public static final String NEWS_URL = "http://mcupdate.tumblr.com/"; private JEditorPane browser; /** * Constructor */ public NewsFrame(JFrame owner) { // Construct super class super(MinecraftRunner.FRAME_TITLE + " - Minecraft News"); // Build the frame's UI buildUI(); // Set the frame's position setLocationRelativeTo(owner); // Load the page loadNewsPage(); } /** * Build the UI of the frame */ public void buildUI() { // Set the layout setLayout(new BorderLayout(0, 0)); // Set some frame stuff setSize(854, 480); setResizable(true); // Set the icon of the frame try { InputStream in = MinecraftRunner.class.getResourceAsStream("/res/icon.png"); if(in != null) setIconImage(ImageIO.read(in)); } catch (IOException e) { } // Set up the browser panel browser = new JEditorPane(); browser.setContentType("text/html"); browser.setEditable(false); browser.setPreferredSize(new Dimension(getWidth(), getHeight())); browser.addHyperlinkListener(this); browser.setBorder(null); JScrollPane pane = new JScrollPane(browser); add(pane); // Add some menu bar options on systems with a menu bar available /*if(Platform.getPlatform().equals(Platform.MAC_OS_X)) { MenuBar menuBar = new MenuBar(); Menu fileMenu = new Menu("File"); MenuItem prefsItem = new MenuItem("Preferences"); fileMenu.add(prefsItem); Menu helpMenu = new Menu("Help"); MenuItem aboutItem = new MenuItem("About"); helpMenu.add(aboutItem); menuBar.add(fileMenu); menuBar.add(helpMenu); setMenuBar(menuBar); }*/ } public void loadNewsPage() { try { loadPage(new URL(NEWS_URL)); } catch (MalformedURLException e) { // Show error messsage JOptionPane.showMessageDialog(this, "Unable to load news page!", "Error", JOptionPane.ERROR_MESSAGE); } } private void loadPage(URL pageUrl) { // Show hour glass cursor while crawling is under way. setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { // Load and display specified page. browser.setPage(pageUrl); } catch (Exception e) { // Show error messsage JOptionPane.showMessageDialog(this, "Unable to load news page!", "Error", JOptionPane.ERROR_MESSAGE); } finally { // Return to default cursor. setCursor(Cursor.getDefaultCursor()); } } private void openWebpage(URL url) { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { try { desktop.browse(url.toURI()); } catch (Exception e) { // Show error messsage JOptionPane.showMessageDialog(this, "!", "Error while opening URL!", JOptionPane.ERROR_MESSAGE); } } else { JOptionPane.showMessageDialog(this, "!", "Error while opening URL in the default browser!", JOptionPane.ERROR_MESSAGE); } } @Override public void hyperlinkUpdate(HyperlinkEvent e) { URL url = e.getURL(); // Open the page in the user's webbrowser if(e.getEventType().equals(EventType.ACTIVATED)) openWebpage(url); } }