/** * @URLview.java * * Sköter det grafiska för * uppgift tre. * Skapar allt vi vill ha. * * * @author Karl-Adam Karlsson * @version 1.0 06/09/30 * * */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.*; /** * Summary description for URLView * */ public class URLView extends JFrame { // Variabler private JTextField urlField; private JTextArea viewText; private JScrollPane textScroller; private JButton getURL; private JPanel contentPane; // /* * Konstruktor, anropar super(), och sedan initialize * component. * Slutligen sätter vi visible till true. * */ public URLView() { super(); initializeComponent(); setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); fetchCode(urlField.getText()); } /** * Här initialiserar vi det grafiska gränssnittet, * och fixar med lyssnare. */ private void initializeComponent() { urlField = new JTextField(); viewText = new JTextArea(); textScroller = new JScrollPane(); getURL = new JButton(); contentPane = (JPanel)this.getContentPane(); // urlField, urlField.setText("http://www.svd.se"); urlField.setToolTipText("Write your URL here"); urlField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { urlFieldAction(e); } }); // viewText, där texten skall visas // textScroller, en scroller för texten. textScroller.setViewportView(viewText); // getURL, knappen som trycks för att utföra hämtningen. // getURL.setBackground(new Color(227, 224, 217)); getURL.setText("Retrieve"); getURL.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { getURLAction(e); } }); // contentPane, bara en content pane. // contentPane.setLayout(null); addComponent(contentPane, urlField, 107,12,611,22); addComponent(contentPane, textScroller, 106,45,612,490); addComponent(contentPane, getURL, 16,11,83,25); // URLView // this.setTitle("Url visare"); this.setLocation(new Point(0, 0)); this.setSize(new Dimension(728, 580)); } /* * Add Component, hjälper till att göra just det. * utan layoutmanager. **/ private void addComponent(Container container,Component c,int x,int y,int width,int height) { c.setBounds(x,y,width,height); container.add(c); } // Eventhanterare för urlField och Retrieve knappen /* * Hanterar events för URLfield. * Egentligen bara Enter vi vill lyssna på, Enter här skall vara ekvivalent * med att trycka retrieve. * */ private void urlFieldAction(ActionEvent e) { fetchCode(urlField.getText()); } /* * Retrieve action listener. * Tycker man retrieve vill vi hämta sidan. * */ private void getURLAction(ActionEvent e) { fetchCode(urlField.getText()); } /* * Kodhämtare metoden. * Anropas från getURLAction eller urlFieldAction * * Skapar ny URL utifrån aURL (indata) * Öppnar sn ström och lsöer buffert till strängen line medan det finns kvar. * Lägger tuill lite i viewText. * */ private void fetchCode(String aURL){ //System.out.println(aURL); viewText.setText(""); try{ URL myURL = new URL(aURL); URLConnection newConnection = myURL.openConnection(); newConnection.setDoInput(true); InputStream urlStream = newConnection.getInputStream(); BufferedReader urlInput = new BufferedReader(new InputStreamReader(urlStream)); String line = ""; while ((line = urlInput.readLine()) != null) viewText.append(line+'\n');//.setText(viewText.getText()+'\n'+line); } catch (Exception e){ System.out.println(e.toString()); } } /* * Main * */ public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception ex) { System.out.println("Failed loading L&F: "); System.out.println(ex); } new URLView(); } }