Java tehtäviä vaikeat vastaus3
Mureakuha
Tehtävä:
Kirjoita ohjelma, jossa on editbox ja listbox. Edittiin kirjoitettu teksti voidaan lisätä listaan 'Lisää listaan'-napilla. Listasta voidaan poistaa rivi tuplanapauttamalla tai 'Poista rivi'-napilla. Listan voi tyhjentää 'Tyhjennä lista'-napilla. Tilarivillä seurataan kokoajan tapahtumia siten, että kun käyttäjä tekee jotain sinne tulee ilmoitus tapauksesta kuten 'lisäsit rivin listaan', 'tyhjensit listan' jne. Tilarivillä seurataan myös listan rivien lukumäärää. Ohjelman täytyy pystyä myös muuttamaan kontrollien kokoa kun lomakkeen kokoa muutetaan.
[muokkaa]
RivitFrame.java
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ä." ); } }
[muokkaa]
RivitApp.java
import javax.swing.UIManager; import java.awt.*; /** * Varsinainen ohjelma. */ public class RivitApp { /** * Luo ja rakentaa ohjelman. */ public RivitApp() { RivitFrame frame = new RivitFrame(); frame.validate(); // keskittää ohjelman ruudun keskelle Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if ( frameSize.height > screenSize.height ) frameSize.height = screenSize.height; if ( frameSize.width > screenSize.width ) frameSize.width = screenSize.width; frame.setLocation( ( screenSize.width - frameSize.width ) / 2, ( screenSize.height - frameSize.height ) / 2 ); // näyttää ohjelman frame.setVisible( true ); } /** * Main-metodi. * @param args käynnistysparametrit */ public static void main( String[] args ) { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); } catch ( Exception e ) { e.printStackTrace(); } new RivitApp(); } }
Tämän dokumentin kopiointi, levittäminen sekä muokkaaminen on sallittua GNU Free Documentation Licensen version 1.2 tai uudemman Free Software Foundationin julkaiseman version mukaisesti, ilman muuttumattomuuslauseketta tai kansitekstejä. Tätä koskee vastuuvapaus.
Kopio lisenssistä (englanniksi) löytyy täältä.
Kopio lisenssistä (englanniksi) löytyy täältä.
Alkuperäinen (c) Petteri Hämäläinen
