import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.LinkedHashMap; import javax.swing.*; /** * Top-level class for the Huffman Encoding Demonstration. * * This can either be executed as an applet or an application. */ public class HuffmanDemo extends JApplet { private final static int WIDTH = 800; private final static int HEIGHT = 600; /** * Starts the demo as an Application * @param args */ public static void main(String[] args) { HuffmanDemo demo = new HuffmanDemo(); demo.init(); JFrame frame = new JFrame(); frame.add(demo); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(WIDTH, HEIGHT); frame.setVisible(true); } /** * Starts the demo as an Applet */ public void init() { final InputDialog inputDialog = new InputDialog(); final NonEmptyValidator rawValidator = new NonEmptyValidator(); final FrequencyValidator codeValidator = new FrequencyValidator(); final CodebookValidator freqValidator = new CodebookValidator(); inputDialog.addInputListener(new InputListener() { public void inputSubmitted(Object input) { if (input != null) display.setText("Current Model\n-------------\n" + input); cards.show(topPanel, "main"); repaint(); } }); display = new JTextArea(); display.setEditable(false); topPanel = new JPanel(); add(topPanel); cards = new CardLayout(); topPanel.setLayout(cards); JPanel defaultPanel = new JPanel(); defaultPanel.setLayout(new BorderLayout()); defaultPanel.add(new JScrollPane(display), BorderLayout.CENTER); topPanel.add(defaultPanel, "main"); topPanel.add(inputDialog, "input"); JMenuBar menuBar = new JMenuBar(); defaultPanel.add(menuBar, BorderLayout.NORTH); JMenu menu; JMenuItem item; menu = new JMenu("Load"); menuBar.add(menu); item = new JMenuItem("Raw Text"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { cards.show(topPanel, "input"); inputDialog.setValidator(new NonEmptyValidator()); inputDialog.setMessage("Enter sample text", Color.BLACK); inputDialog.setText(""); // clear the input box repaint(); } }); menu.add(item); item = new JMenuItem("Frequencies"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { cards.show(topPanel, "input"); inputDialog.setValidator(new FrequencyValidator()); inputDialog.setMessage("Enter symbol frequencies using sample format shown below", Color.BLACK); inputDialog.setText("a 25\nb 76\ne 135"); repaint(); } }); menu.add(item); item = new JMenuItem("Codebook"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { cards.show(topPanel, "input"); inputDialog.setValidator(new CodebookValidator()); inputDialog.setMessage("Enter codebook using sample format shown below", Color.BLACK); inputDialog.setText("a 01\nb 00\ne 1"); repaint(); } }); menu.add(item); } private JPanel topPanel; private CardLayout cards; private JTextArea display; }