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

/**
 * Ikkunaluokka.
 */
public class RivitFrame extends JFrame
{
  private JLabel statusBar = new JLabel();
  private JTextField textField = new JTextField();
  private JScrollPane scrollPane = new JScrollPane();
  private DefaultListModel listModel = new DefaultListModel();
  private JList list = new JList( listModel );

  /**
   * Konstruktori.
   */
  public RivitFrame()
  {
    JPanel panel = new JPanel();

    JPanel contentPane = ( JPanel ) getContentPane();
    contentPane.setLayout( new BorderLayout() );
    setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
    setResizable( false );
    setSize( new Dimension( 400, 300 ) );
    setTitle( "Rivien lisäys" );
    statusBar.setBorder( BorderFactory.createEtchedBorder() );
    statusBar.setText( "Aloita..." );
    panel.setLayout( new GridBagLayout() );
    panel.setBorder( BorderFactory.createEtchedBorder() );
    textField.setText( "Aloita..." );

    JButton buttonPoista = new JButton( "Poista rivi" );
    buttonPoista.addActionListener( new java.awt.event.ActionListener()
    {
      public void actionPerformed( ActionEvent e )
      {
        buttonPoista_actionPerformed( e );
      }
    } );

    JButton buttonLisaa = new JButton( "Lisää listaan" );
    buttonLisaa.addActionListener( new java.awt.event.ActionListener()
    {
      public void actionPerformed( ActionEvent e )
      {
        buttonLisaa_actionPerformed( e );
      }
    } );

    JButton buttonTyhjenna = new JButton( "Tyhjenna lista" );
    buttonTyhjenna.addActionListener( new java.awt.event.ActionListener()
    {
      public void actionPerformed( ActionEvent e )
      {
        buttonTyhjenna_actionPerformed( e );
      }
    } );
    scrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
    scrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
    list.setPrototypeCellValue( textField );
    contentPane.add( statusBar, BorderLayout.SOUTH );
    contentPane.add( panel, BorderLayout.CENTER );
    panel.add( textField, new GridBagConstraints( 0, 0, 1, 2, 0.0, 0.0
        , GridBagConstraints.NORTH, GridBagConstraints.VERTICAL, new Insets( 0, 0, 20, 20 ), 150, 0 ) );
    panel.add( buttonLisaa, new GridBagConstraints( 1, 0, 1, 1, 0.0, 0.0
        , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets( 0, 0, 0, 0 ), 0, 0 ) );
    panel.add( buttonTyhjenna, new GridBagConstraints( 1, 3, 1, 1, 0.0, 0.0
        , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets( 0, 0, 80, 0 ), 0, 0 ) );
    panel.add( scrollPane, new GridBagConstraints( 0, 2, 1, 3, 0.0, 0.0
        , GridBagConstraints.NORTH, GridBagConstraints.VERTICAL, new Insets( 0, 0, 0, 20 ), 130, 110 ) );
    panel.add( buttonPoista, new GridBagConstraints( 1, 2, 1, 1, 0.0, 0.0
        , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets( 0, 0, 0, 0 ), 0, 0 ) );

    listModel.addElement( "Antti" );
    listModel.addElement( "Jussi" );
    listModel.addElement( "Kaija" );
    listModel.addElement( "Liisa" );
    listModel.addElement( "Mikko" );
    listModel.addElement( "Pekka" );
    listModel.addElement( "Susanna" );
    listModel.addElement( "Tiina" );
    list.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
    list.setSelectedIndex( 0 );

    scrollPane.getViewport().add( list, null );
  }

  /**
   * Lisää uuden tekstin.
   * @param e tapahtuman tarkempi kuvaus
   */
  void buttonLisaa_actionPerformed( ActionEvent e )
  {
    if ( textField.getText() != "" )
    {
      listModel.addElement( textField.getText() );
      statusBar.setText( "Lisäys onnistui. " + listModel.getSize() + " riviä." );
    }
    else
    {
      statusBar.setText( "Lisäys ei onnistunut. " + listModel.getSize() + " riviä." );
    }
  }

  /**
   * POistaa valitun rivin.
   * @param e tapahtuman tarkempi kuvaus
   */
  void buttonPoista_actionPerformed( ActionEvent e )
  {
    int index = list.getSelectedIndex();
    if ( index == -1 )
    {
      Toolkit.getDefaultToolkit().beep();
      statusBar.setText( "Poisto ei onnistunut." );
    }
    else
    {
      listModel.remove( index );
      if ( index == listModel.getSize() )
        index--;
      list.setSelectedIndex( index );
      statusBar.setText( "Poisto onnistui. " + listModel.getSize() + " riviä." );
    }
  }

  /**
   * Tyhjentää listan.
   * @param e tapahtuman tarkempi kuvaus
   */
  void buttonTyhjenna_actionPerformed( ActionEvent e )
  {
    listModel.clear();
    statusBar.setText( "Tyhjennys onnistui. 0 riviä." );
  }
}
