Java tutorial
/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O'Reilly */ // SiteFrame.java //A simple extension of the JInternalFrame class that contains a list //object. Elements of the list represent HTML pages for a web site. // import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileReader; import java.io.FileWriter; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.ImageIcon; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLayeredPane; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JToolBar; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class SiteFrame extends JInternalFrame { JList nameList; SiteManager parent; // Hardcode the pages of our "site" to keep things simple String[] pages = { "index.html", "page1.html", "page2.html" }; public SiteFrame(String name, SiteManager sm) { super("Site: " + name, true, true, true); parent = sm; setBounds(50, 50, 250, 100); nameList = new JList(pages); nameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); nameList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent lse) { // We know this is the list, so pop up the page. if (!lse.getValueIsAdjusting()) { parent.addPageFrame((String) nameList.getSelectedValue()); } } }); Container contentPane = getContentPane(); contentPane.add(nameList, BorderLayout.CENTER); } } //A sample Swing application that manages several internal frames. This //is the main class for working with the SiteFrame and PageFrame classes. // class SiteManager extends JFrame { JLayeredPane desktop; Vector popups = new Vector(); public SiteManager() { super("Web Site Manager"); setSize(450, 250); setDefaultCloseOperation(EXIT_ON_CLOSE); Container contentPane = getContentPane(); JToolBar jtb = new JToolBar(); jtb.add(new CutAction(this)); jtb.add(new CopyAction(this)); jtb.add(new PasteAction(this)); contentPane.add(jtb, BorderLayout.NORTH); // Add our LayeredPane object for the internal frames. desktop = new JDesktopPane(); contentPane.add(desktop, BorderLayout.CENTER); addSiteFrame("Sample"); } public static void main(String args[]) { SiteManager mgr = new SiteManager(); mgr.setVisible(true); } // Methods to create our internal frames public void addSiteFrame(String name) { SiteFrame sf = new SiteFrame(name, this); popups.addElement(sf); desktop.add(sf, new Integer(2)); // Keep sites on top for now sf.setVisible(true); } public void addPageFrame(String name) { PageFrame pf = new PageFrame(name, this); desktop.add(pf, new Integer(1)); pf.setVisible(true); pf.setIconifiable(true); popups.addElement(pf); } public JInternalFrame getCurrentFrame() { for (int i = 0; i < popups.size(); i++) { JInternalFrame currentFrame = (JInternalFrame) popups.elementAt(i); if (currentFrame.isSelected()) { return currentFrame; } } return null; } } class PasteAction extends AbstractAction { SiteManager manager; public PasteAction(SiteManager sm) { super("", new ImageIcon("paste.gif")); manager = sm; } public void actionPerformed(ActionEvent ae) { JInternalFrame currentFrame = manager.getCurrentFrame(); if (currentFrame == null) { return; } // cannot cut or paste sites if (currentFrame instanceof SiteFrame) { return; } ((PageFrame) currentFrame).pasteText(); } } class PageFrame extends JInternalFrame implements ActionListener { SiteManager parent; String filename; JTextArea ta; public PageFrame(String name, SiteManager sm) { super("Page: " + name, true, true, true, true); parent = sm; setBounds(50, 50, 300, 150); Container contentPane = getContentPane(); // Create a text area to display the contents of our file in // and stick it in a scrollable pane so we can see everything ta = new JTextArea(); JScrollPane jsp = new JScrollPane(ta); contentPane.add(jsp, BorderLayout.CENTER); JMenuBar jmb = new JMenuBar(); JMenu fileMenu = new JMenu("File"); JMenuItem saveItem = new JMenuItem("Save"); saveItem.addActionListener(this); fileMenu.add(saveItem); jmb.add(fileMenu); setJMenuBar(jmb); filename = name; loadContent(); } public void actionPerformed(ActionEvent ae) { // Can only be the save menu saveContent(); } public void loadContent() { try { FileReader fr = new FileReader(filename); ta.read(fr, null); fr.close(); } catch (Exception e) { System.err.println("Could not load page: " + filename); } } public void saveContent() { try { FileWriter fw = new FileWriter(filename); ta.write(fw); fw.close(); } catch (Exception e) { System.err.println("Could not save page: " + filename); } } public void cutText() { ta.cut(); } public void copyText() { ta.copy(); } public void pasteText() { ta.paste(); } } class CutAction extends AbstractAction { SiteManager manager; public CutAction(SiteManager sm) { super("", new ImageIcon("cut.gif")); manager = sm; } public void actionPerformed(ActionEvent ae) { JInternalFrame currentFrame = manager.getCurrentFrame(); if (currentFrame == null) { return; } // cannot cut or paste sites if (currentFrame instanceof SiteFrame) { return; } ((PageFrame) currentFrame).cutText(); } } class CopyAction extends AbstractAction { SiteManager manager; public CopyAction(SiteManager sm) { super("", new ImageIcon("copy.gif")); manager = sm; } public void actionPerformed(ActionEvent ae) { JInternalFrame currentFrame = manager.getCurrentFrame(); if (currentFrame == null) { return; } // can't cut or paste sites if (currentFrame instanceof SiteFrame) { return; } ((PageFrame) currentFrame).copyText(); } }