import javax.swing.*; import java.io.*; import com.elharo.io.ui.*; import java.awt.*; import java.awt.event.*; public class FileViewer2 extends JFrame implements ActionListener { JFileChooser chooser = new JFileChooser(); JWritableTextArea theView = new JWritableTextArea(); TextModePanel mp = new TextModePanel(); public FileViewer2() { super("FileViewer"); } public void init() { chooser.setApproveButtonText("View File"); chooser.setApproveButtonMnemonic('V'); chooser.addActionListener(this); this.getContentPane().add(BorderLayout.EAST, chooser); JScrollPane sp = new JScrollPane(theView); sp.setPreferredSize(new Dimension(640, 400)); this.getContentPane().add(BorderLayout.SOUTH, sp); this.getContentPane().add(BorderLayout.WEST, mp); this.pack(); // Center on display Dimension display = getToolkit().getScreenSize(); Dimension bounds = this.getSize(); int x = (display.width - bounds.width)/2; int y = (display.height - bounds.height)/2; if (x < 0) x = 10; if (y < 0) y = 15; this.setLocation(x, y); } public void actionPerformed(ActionEvent evt) { if (evt.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) { File f = chooser.getSelectedFile(); if (f != null) { theView.reset(); try { InputStream in = new FileInputStream(f); // This program was really slow until I buffered the stream. in = new BufferedInputStream(in); in = new ProgressMonitorInputStream(this, "Reading...", in); if (!mp.isText()) { FileDumper6.dump(in, theView.getWriter(), mp.getMode(), mp.isBigEndian(), mp.isDeflated(), mp.isGZipped(), mp.getPassword()); } else { FileDumper6.dump(in, theView.getWriter(), mp.getEncoding(), null, mp.isDeflated(), mp.isGZipped(), mp.getPassword()); } } catch (IOException ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "I/O Error", JOptionPane.ERROR_MESSAGE); } } } else if (evt.getActionCommand().equals(JFileChooser.CANCEL_SELECTION)) { this.setVisible(false); this.dispose(); // This is a single window application System.exit(0); } } public static void main(String[] args) { FileViewer2 viewer = new FileViewer2(); viewer.init(); viewer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); viewer.setVisible(true); } }