Mega Code Archive

 
Categories / Java / Swing JFC
 

JEditorPane and the Swing HTML Package 7

/* Core SWING Advanced Programming  By Kim Topley ISBN: 0 13 083292 8        Publisher: Prentice Hall   */ import java.awt.Color; import java.awt.Cursor; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.URL; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.text.EditorKit; public class EditorPaneExample7 extends JFrame {   public EditorPaneExample7() {     super("JEditorPane Example 7");     pane = new JEditorPane();     pane.setEditable(false); // Start read-only     getContentPane().add(new JScrollPane(pane), "Center");     // Build the panel of controls     JPanel panel = new JPanel();     panel.setLayout(new GridBagLayout());     GridBagConstraints c = new GridBagConstraints();     c.gridwidth = 1;     c.gridheight = 1;     c.anchor = GridBagConstraints.EAST;     c.fill = GridBagConstraints.NONE;     c.weightx = 0.0;     c.weighty = 0.0;     JLabel urlLabel = new JLabel("File name: ", JLabel.RIGHT);     panel.add(urlLabel, c);     JLabel loadingLabel = new JLabel("State: ", JLabel.RIGHT);     c.gridy = 1;     panel.add(loadingLabel, c);     JLabel typeLabel = new JLabel("Type: ", JLabel.RIGHT);     c.gridy = 2;     panel.add(typeLabel, c);     c.gridx = 1;     c.gridy = 0;     c.gridwidth = 1;     c.weightx = 1.0;     c.fill = GridBagConstraints.HORIZONTAL;     textField = new JTextField(32);     panel.add(textField, c);     loadingState = new JLabel(spaces, JLabel.LEFT);     loadingState.setForeground(Color.black);     c.gridy = 1;     c.gridwidth = 2;     panel.add(loadingState, c);     loadedType = new JLabel(spaces, JLabel.LEFT);     loadedType.setForeground(Color.black);     c.gridy = 2;     panel.add(loadedType, c);     getContentPane().add(panel, "South");     panel = new JPanel();     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));     saveButton = new JButton("Save");     plain = new JCheckBox("Plain Text");     html = new JCheckBox("HTML");     rtf = new JCheckBox("RTF");     panel.add(plain);     panel.add(html);     panel.add(rtf);     ButtonGroup group = new ButtonGroup();     group.add(plain);     group.add(html);     group.add(rtf);     plain.setSelected(true);     panel.add(Box.createVerticalStrut(10));     panel.add(saveButton);     panel.add(Box.createVerticalGlue());     panel.setBorder(BorderFactory.createEmptyBorder(2, 4, 2, 4));     getContentPane().add(panel, "East");     // Change page based on text field     textField.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent evt) {         String fileName = textField.getText().trim();         file = new File(fileName);         absolutePath = file.getAbsolutePath();         String url = "file:///" + absolutePath;         try {           // Check if the new page and the old           // page are the same.           URL newURL = new URL(url);           URL loadedURL = pane.getPage();           if (loadedURL != null && loadedURL.sameFile(newURL)) {             return;           }           // Try to display the page           textField.setEnabled(false); // Disable input           textField.paintImmediately(0, 0, textField.getSize().width,               textField.getSize().height);           saveButton.setEnabled(false);           saveButton.paintImmediately(0, 0,               saveButton.getSize().width,               saveButton.getSize().height);           setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));           // Busy cursor           loadingState.setText("Loading...");           loadingState.paintImmediately(0, 0,               loadingState.getSize().width, loadingState                   .getSize().height);           loadedType.setText("");           loadedType.paintImmediately(0, 0,               loadedType.getSize().width,               loadedType.getSize().height);           pane.setEditable(false);           pane.setPage(url);           loadedType.setText(pane.getContentType());         } catch (Exception e) {           JOptionPane.showMessageDialog(pane, new String[] {               "Unable to open file", url }, "File Open Error",               JOptionPane.ERROR_MESSAGE);           loadingState.setText("Failed");           textField.setEnabled(true);           setCursor(Cursor.getDefaultCursor());         }       }     });     // Listen for page load to complete     pane.addPropertyChangeListener(new PropertyChangeListener() {       public void propertyChange(PropertyChangeEvent evt) {         if (evt.getPropertyName().equals("page")) {           loadingState.setText("Page loaded.");           textField.setEnabled(true); // Allow entry of new file name           textField.requestFocus();           setCursor(Cursor.getDefaultCursor());           // Allow editing and saving if appropriate           pane.setEditable(file.canWrite());           saveButton.setEnabled(file.canWrite());         }       }     });     saveButton.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent evt) {         Writer w = null;         OutputStream os = System.out;         String contentType;         if (plain.isSelected()) {           contentType = "text/plain";           w = new OutputStreamWriter(os);         } else if (html.isSelected()) {           contentType = "text/html";           w = new OutputStreamWriter(os);         } else {           contentType = "text/rtf";         }         EditorKit kit = pane.getEditorKitForContentType(contentType);         try {           if (w != null) {             kit.write(w, pane.getDocument(), 0, pane.getDocument()                 .getLength());             w.flush();           } else {             kit.write(os, pane.getDocument(), 0, pane.getDocument()                 .getLength());             os.flush();           }         } catch (Exception e) {           System.out.println("Write failed");         }       }     });   }   public static void main(String[] args) {     try {         UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");     } catch (Exception evt) {}        JFrame f = new EditorPaneExample7();     f.addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent evt) {         System.exit(0);       }     });     f.setSize(500, 400);     f.setVisible(true);   }   private static final String spaces = "                    ";   private JEditorPane pane;   private JTextField textField;   private JLabel loadingState;   private JLabel loadedType;   private JButton saveButton;   private JCheckBox plain;   private JCheckBox html;   private JCheckBox rtf;   private File file;   private String absolutePath; }