Simpel GUI-programmering
Vejledende løsninger

 

 

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

class AddFrame extends JFrame implements ActionListener {
  
  private JTextField arg1, arg2, resultat;
  
  public AddFrame( String title ) {
    super( title );
    
    getContentPane().setLayout( new FlowLayout() );
    
    JLabel arg1Label = new JLabel( "1. argument:" );
    getContentPane().add( arg1Label );
    
    arg1 = new JTextField( 8 );
    getContentPane().add( arg1 );
    
    JLabel arg2Label = new JLabel( "2. argument:" );
    getContentPane().add( arg2Label );
    
    arg2 = new JTextField( 8 );
    getContentPane().add( arg2 );
    
    JButton adder = new JButton( "+" );
    adder.addActionListener( this );
    getContentPane().add( adder );
    
    resultat = new JTextField( 8 );
    resultat.setEditable( false );
    getContentPane().add( resultat );
    
    setDefaultCloseOperation( EXIT_ON_CLOSE );
    
    pack();
    setVisible( true );
  }
  
  public void actionPerformed( ActionEvent e ) {
    try {
      double arg1Værdi = Double.parseDouble( arg1.getText() );
      double arg2Værdi = Double.parseDouble( arg2.getText() );
      double resultatVærdi = arg1Værdi + arg2Værdi;
      resultat.setText( "" + resultatVærdi );
    }
    catch ( NumberFormatException nfe ) {
    }
  }
}

Opgaven ligner meget moms-eksemplet, og anvender de samme konstruktioner.

 

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

class AddFrame extends JFrame implements ActionListener {
  
  private JTextField arg1, arg2, resultat;
  private JButton add, sub, mul, div;
  
  public AddFrame( String title ) {
    super( title );
    
    getContentPane().setLayout( new FlowLayout() );
    
    arg1 = new JTextField( 8 );
    getContentPane().add( arg1 );
    
    add = new JButton( "+" );
    add.addActionListener( this );
    getContentPane().add( add );
    
    sub = new JButton( "-" );
    sub.addActionListener( this );
    getContentPane().add( sub );
    
    mul = new JButton( "*" );
    mul.addActionListener( this );
    getContentPane().add( mul );
    
    div = new JButton( "/" );
    div.addActionListener( this );
    getContentPane().add( div );
    
    arg2 = new JTextField( 8 );
    getContentPane().add( arg2 );
    
    JLabel ligLabel = new JLabel( "=" );
    getContentPane().add( ligLabel );
    
    resultat = new JTextField( 14 );
    resultat.setEditable( false );
    getContentPane().add( resultat );
    
    setDefaultCloseOperation( EXIT_ON_CLOSE );
    
    pack();
    setVisible( true );
  }
  
  public void actionPerformed( ActionEvent e ) {
    try {
      double arg1Værdi = Double.parseDouble( arg1.getText() );
      double arg2Værdi = Double.parseDouble( arg2.getText() );
    
      Object source = e.getSource();
      double resultatVærdi;
    
      if ( source == add )
        resultatVærdi = arg1Værdi + arg2Værdi;
      else if ( source == sub )
        resultatVærdi = arg1Værdi - arg2Værdi;
      else if ( source == mul )
        resultatVærdi = arg1Værdi * arg2Værdi;
      else
        resultatVærdi = arg1Værdi / arg2Værdi;
    
      resultat.setText( "" + resultatVærdi );
    }
    catch ( NumberFormatException nfe ) {
    }
  }
}

 

3 Vi vil her indskrænke os til løsningen af opgave 3.2, da den bygninger videre på opgave 3.1:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SummerFrame extends JFrame implements ActionListener {
  private JTextField s[], sumFelt;
  private static final int fieldWidth=4;
  
  public SummerFrame( String title, int led ) {
    super( title );
    
    getContentPane().setLayout( new FlowLayout() );
    
    s = new JTextField[led];
    for ( int i=0; i<s.length; i++ ) {
      s[i] = new JTextField( fieldWidth );
      getContentPane().add( s[i] );
      if ( i != s.length-1 )
        getContentPane().add( new JLabel( "+" ) );
    }
    
    JButton resultButton = new JButton( "=" );
    getContentPane().add( resultButton );
    resultButton.addActionListener( this );
    
    sumFelt = new JTextField( fieldWidth );
    getContentPane().add( sumFelt );
    sumFelt.setEditable( false );
    
    setDefaultCloseOperation( EXIT_ON_CLOSE );
    
    pack();
    setVisible( true );
  }
  
  public void actionPerformed( ActionEvent e ) {
    int sum=0;
    for ( int i=0; i<s.length; i++ )
      sum += getValue( s[i] );
    
    sumFelt.setText( "" + sum );
  }
  
  private int getValue( JTextField tf ) {
    try {
      return Integer.parseInt( tf.getText() );
    } catch ( NumberFormatException e ) {
      return 0;
    }
  }
}

 

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

class MinMaxFrame extends JFrame implements ActionListener {
  
  private JButton minButton, maxButton;
  private JTextField arg1Field, arg2Field, resField;
  
  public MinMaxFrame( String title ) {
    super( title );
    
    getContentPane().setLayout( new FlowLayout() );
    
    arg1Field = new JTextField( 8 );
    getContentPane().add( arg1Field );
    
    arg2Field = new JTextField( 8 );
    getContentPane().add( arg2Field );
    
    minButton = new JButton( "Min" );
    minButton.addActionListener( this );
    getContentPane().add( minButton );
    
    maxButton = new JButton( "Max" );
    maxButton.addActionListener( this );
    getContentPane().add( maxButton );
    
    resField = new JTextField( 8 );
    getContentPane().add( resField );
    
    setDefaultCloseOperation( EXIT_ON_CLOSE );
    
    pack();
    setVisible( true );
  }
  
  public void actionPerformed( ActionEvent e ) {
    try {
      int arg1 = Integer.parseInt( arg1Field.getText() );
      int arg2 = Integer.parseInt( arg2Field.getText() );
      
      Object source = e.getSource();
      
      if ( source == minButton ) {
        // Minimum
        if ( arg1 < arg2 )
          resField.setText( "" + arg1 );
        else
          resField.setText( "" + arg2 );
      } else if ( source == maxButton ) {
        // Maximum
        if ( arg1 > arg2 )
          resField.setText( "" + arg1 );
        else
          resField.setText( "" + arg2 );
      }
    }
    catch ( NumberFormatException ex ) {
      resField.setText( "Fejl" );
    }
  }
}

 

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

class HalvDobbeltFrame extends JFrame implements ActionListener {
  
  private JButton halvButton, dobbeltButton;
  private JTextField argField, resField;
  
  public HalvDobbeltFrame( String title ) {
    super( title );
    
    getContentPane().setLayout( new FlowLayout() );
    
    argField = new JTextField( 8 );
    getContentPane().add( argField );
    
    halvButton = new JButton( "Halv" );
    halvButton.addActionListener( this );
    getContentPane().add( halvButton );
    
    dobbeltButton = new JButton( "Dobbelt" );
    dobbeltButton.addActionListener( this );
    getContentPane().add( dobbeltButton );
    
    resField = new JTextField( 8 );
    getContentPane().add( resField );
    
    setDefaultCloseOperation( EXIT_ON_CLOSE );
    
    pack();
    setVisible( true );
  }
  
  public void actionPerformed( ActionEvent e ) {
    try {
      int arg = Integer.parseInt( argField.getText() );
      
      Object source = e.getSource();
      
      if ( source == halvButton )
        // Det halve
        resField.setText( "" + (arg/2) );
      else if ( source == dobbeltButton )
        // Det dobbelt
        resField.setText( "" + (arg*2) );
    }
    catch ( NumberFormatException ex ) {
      resField.setText( "Fejl" );
    }
  }
}