import javax.swing.*; import java.awt.event.*; import java.awt.BorderLayout; import java.awt.Color; import java.util.NoSuchElementException; public class BinarySearchTreeView extends JPanel implements ActionListener { private BinarySearchTree btree = new BinarySearchTree( ); private JLabel count; private JTextField keyField; private JTextField valueField; public BinarySearchTreeView() { super(); setLayout( new BorderLayout() ); setBorder( BorderFactory.createLineBorder( Color.black, 2 ) ); JPanel buttons = new JPanel(); JButton clearBtn = new JButton( "clear" ); buttons.add( clearBtn ); clearBtn.addActionListener( this ); JButton firstBtn = new JButton( "first" ); buttons.add( firstBtn ); firstBtn.addActionListener( this ); JButton lastBtn = new JButton( "last" ); buttons.add( lastBtn ); lastBtn.addActionListener( this ); JButton getBtn = new JButton( "get" ); buttons.add( getBtn ); getBtn.addActionListener( this ); JButton putBtn = new JButton( "put" ); buttons.add( putBtn ); putBtn.addActionListener( this ); JButton removeBtn = new JButton( "remove" ); buttons.add( removeBtn ); removeBtn.addActionListener( this ); JButton iteratorBtn = new JButton( "iterator" ); buttons.add( iteratorBtn ); iteratorBtn.addActionListener( this ); add( buttons, BorderLayout.NORTH ); JPanel dataPanel = new JPanel( new BorderLayout() ); JPanel countPanel = new JPanel(); JLabel countLabel = new JLabel( "Count:" ); countPanel.add( countLabel, BorderLayout.WEST ); count = new JLabel( "0", JLabel.LEFT ); countPanel.add( count, BorderLayout.WEST ); dataPanel.add( countPanel, BorderLayout.WEST ); JPanel keyPanel = new JPanel( ); JLabel keyLabel = new JLabel( "Key:" ); keyPanel.add( keyLabel ); keyField = new JTextField( 12 ); keyPanel.add( keyField ); dataPanel.add( keyPanel, BorderLayout.CENTER ); JPanel valuePanel = new JPanel( ); JLabel valueLabel = new JLabel( "Value:" ); valuePanel.add( valueLabel ); valueField = new JTextField( 12 ); valuePanel.add( valueField, BorderLayout.EAST ); dataPanel.add( valuePanel, BorderLayout.EAST ); add( dataPanel, BorderLayout.CENTER ); } public void actionPerformed( ActionEvent e ) { String command = e.getActionCommand(); if ( command.equals( "clear" ) ) doClear(); else if ( command.equals( "first" ) ) doFirst(); else if ( command.equals( "last" ) ) doLast(); else if ( command.equals( "get" ) ) doGet(); else if ( command.equals( "put" ) ) doPut(); else if ( command.equals( "remove" ) ) doRemove(); else if ( command.equals( "iterator" ) ) doIterator(); updateView(); } private void doClear() { btree.clear(); keyField.setText( null ); valueField.setText( null ); } private void doFirst() { String key = (String) btree.firstKey(); keyField.setText( key ); valueField.setText( (String) btree.get( key )); } private void doLast() { String key = (String) btree.lastKey(); keyField.setText( key ); valueField.setText( (String) btree.get( key )); } private void doPut() { valueField.setText((String) btree.put( keyField.getText(), valueField.getText())); } private void doGet() { valueField.setText( (String) btree.get( keyField.getText() ) ); } private void doRemove() { valueField.setText( (String) btree.remove( keyField.getText() ) ); } private void doIterator() { MapIterator iter = btree.iterator(); MapIteratorView iterView = new MapIteratorView( iter ); iterView.setVisible( true ); } private void updateView() { count.setText( String.valueOf( btree.size() )); } }