import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class NumberGUI extends JFrame implements ActionListener {
//vinduets bredde og højde samt tekstbredde
private static final int width = 300;
private static final int height = 150;
private static final int textWidth = 30;
//Konstanter til knapperne
private static final String udregnText = " UDREGN ";
private static final String rydText = "Ryd felter";
private static final String afslutText = " Afslut ";
//Knapper
private JButton beregn = new JButton(udregnText);
private JButton ryd = new JButton(rydText);;
private JButton afslut = new JButton(afslutText);
//Tekster i vinduet
private JLabel binaryText = new JLabel("Binær : ", JLabel.RIGHT);
private JLabel octalText = new JLabel("Octal : ", JLabel.RIGHT);
private JLabel decimalText = new JLabel("Decimal : ", JLabel.RIGHT);
private JLabel hexiText = new JLabel("Hexidecimal : ", JLabel.RIGHT);
//Tekstfelterne
private JTextField binary = new JTextField(textWidth);
private JTextField octal = new JTextField(textWidth);
private JTextField decimal = new JTextField(textWidth);
private JTextField hexi = new JTextField(textWidth);
private String bin,oct,dec,hex;
private Converter model;
public NumberGUI( Converter model , String title ) throws HeadlessException {
super(title); //kalder JFrames konstruktør
this.model = model;
this.getContentPane().setLayout( new BorderLayout() ); //overordnet layout
//Tekstfelterne sættes i midten
Panel fields = new Panel();
fields.setLayout( new GridLayout( 4,2 ));
fields.add(binaryText);
fields.add("Binær" , binary );
fields.add(octalText);
fields.add("Binær" , octal );
fields.add(decimalText);
fields.add("Binær" , decimal );
fields.add(hexiText);
fields.add("Binær" , hexi );
this.getContentPane().add( fields , BorderLayout.CENTER );
//Knapperne sættes nederst
Panel buttons = new Panel();
buttons.add( "Beregn" , beregn );
buttons.add( "Ryd" , ryd );
buttons.add( "Afslut" , afslut );
this.getContentPane().add( buttons , BorderLayout.SOUTH );
//sæt lytter på knapperne (klassen her er også lytter)
beregn.addActionListener(this);
ryd.addActionListener(this);
afslut.addActionListener(this);
//luk vinduet hvis man klikker på X'et
this.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize( ); //finder aktuelle skærmopløsning
this.setLocation((screen.width - width) / 2, (screen.height - height) / 3); //sæt vinduet midt på skærmen
this.setResizable(false); //vinduets størrelse kan ikke ændres
this.setSize( width , height ); //sæt vinduets størrelse
this.setVisible( true ); //vinduet vises NU!
}
//læser indholdet i alle tekstfelterne
private void getValues() {
bin = binary.getText().trim();
oct = octal.getText().trim();
dec = decimal.getText().trim();
hex = hexi.getText().trim().toUpperCase();
}
//sletter indholdet i alle tekstfelterne
private void clearFields() {
binary.setText("");
octal.setText("");
decimal.setText("");
hexi.setText("");
}
//sætter værdierne b,o,d og h ind i tekstfelterne
protected void update(String b , String o , String d , String h ) {
binary.setText(b);
octal.setText(o);
decimal.setText(d);
hexi.setText(h);
}
//Laver et fejl-vindue med text som fejlmeddelelse
protected void fejlMeddelelse( String text ) {
JOptionPane.showMessageDialog(this , text , "Fejl i indtastning" , JOptionPane.ERROR_MESSAGE);
}
//KNAPLYTTTER
public void actionPerformed( ActionEvent e) {
String source = ((JButton) e.getSource()).getText(); //Hvad hedder knappen der blev trykket på?
System.out.println(source);
if( source.equals(udregnText)) {
getValues();
model.calculate( bin , oct , dec , hex );
}
else if( source.equals(rydText)) {
clearFields();
}
else if( source.equals(afslutText) ) {
System.exit(0);
}
}
}
return to top