import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


class mainWindow extends JFrame
{
    JTextField jtbin, jtoct, jthex, jtchar, jtdec;
    JButton jbbin, jboct, jbhex, jbchar, jbdec;
    JLabel msg;
    
    mainWindow()
    {
	addWindowListener( new windowclose() );
	setTitle("Convert between various representations");
	Container cp = getContentPane();
	JPanel jp=new JPanel();
	jp.setLayout( new GridLayout(5,2) );
	msg = new JLabel ("enter data and click a button");
	ActionListener bh = new ButtonHandler();

	jbbin = new JButton ("Binary");
	jbbin.addActionListener( bh );
	jtbin = new JTextField();	    
	jbchar = new JButton ("Char");
	jbchar.addActionListener( bh );
	jtchar = new JTextField();
	jboct = new JButton( "Octal" );
	jboct.addActionListener( bh );
	jbhex = new JButton( "Hex" );
	jbhex.addActionListener( bh );
	jtoct = new JTextField();
	jthex = new JTextField();
	jbdec = new JButton( "Decimal" );
	jbdec.addActionListener( bh );
	jtdec = new JTextField();

	jp.add ( jbbin );
	jp.add ( jtbin );
	jp.add ( jbchar);
	jp.add ( jtchar );
	jp.add ( jboct );
	jp.add ( jtoct );
	jp.add ( jbdec );
	jp.add ( jtdec );
	jp.add ( jbhex );
	jp.add ( jthex );

	cp.add(msg, "South");
	cp.add(jp,"Center" );
	setSize(200, 300 );
    }

    class ButtonHandler implements ActionListener
    {
	public void actionPerformed( ActionEvent e )
	{
	    Object ob = e.getSource();
	    if ( ob == jbbin ) {
		int temp = Integer.parseInt( jtbin.getText(),2 );
		msg.setText("Convert from binary");
		jtchar.setText( String.valueOf ((char)temp) ); 
		jthex.setText( Integer.toHexString( temp ) );
		jtoct.setText( Integer.toOctalString( temp ) );
		jtdec.setText( Integer.toString( temp ) );
	    }
	    else if ( ob == jbdec ) {
		int temp = Integer.parseInt( jtdec.getText() );
		msg.setText("Convert from Decimal");
		jtchar.setText( String.valueOf ((char)temp) ); 
		jthex.setText( Integer.toHexString( temp ) );
		jtoct.setText( Integer.toOctalString( temp ) );
		jtbin.setText( Integer.toString( temp, 2 ) );
	    }
	    else if ( ob == jbhex ) {
		int temp = Integer.parseInt( jthex.getText(),16 );
		msg.setText("Convert from Hex");
		jtchar.setText( String.valueOf ((char)temp) ); 
		jtbin.setText( Integer.toString( temp, 2 ) );
		jtoct.setText( Integer.toOctalString( temp ) );
		jtdec.setText( Integer.toString( temp ) );
	    }
	    else if ( ob == jboct ) {
		int temp = Integer.parseInt( jtoct.getText(),8 );
		msg.setText("Convert from Oct");
		jtchar.setText( String.valueOf ((char)temp) ); 
		jtbin.setText( Integer.toString( temp, 2 ) );
		jthex.setText( Integer.toHexString( temp ) );
		jtdec.setText( Integer.toString( temp ) );		
	    }
	    else if ( ob == jbchar ) {
		int temp = (int)jtchar.getText().charAt(0);;

		msg.setText("Convert from Char");
		jtbin.setText( Integer.toString( temp, 2 ) );
		jthex.setText( Integer.toHexString( temp ) );
		jtoct.setText( Integer.toOctalString( temp ) );
		jtdec.setText( Integer.toString( temp ) );
	    }

	    update(getGraphics() );
	}
    }
	
}

class windowclose extends WindowAdapter
{
    public void windowClosing( WindowEvent e )
    { System.exit(0); }
}


public class Bit_Twiddle
{
	    
    public static void main ( String []args )
    {
	mainWindow jf = new mainWindow();
	jf.setVisible(true);
    }
}

