package oefenen;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TijdOmrekenen extends JPanel { //Dit betekent dat het een paneel is. (extends JPanel)
private JTextField seconden, minuten, uren; //Declaratie van JTextFields (dit zijn textveldjes die standaard in de javax.swing package zitten).
private JButton secondenButton, minutenButton, urenButton; //Declaratie van JButton (dit zijn knoppen die standaard in de javax.swing package zitten ).
private JTextField result; //TextField waar het resultaat in komt te staan.
public TijdOmrekenen() {
setLayout( new BoxLayout(this, BoxLayout.Y_AXIS)); //Zet de layout van het paneel op een BoxLayout (link 1).
EventHandler eventHandler = new EventHandler(); //Maakt een nieuwe instantie van de klasse EventHandler (dit is in dit geval een private klasse).
seconden = new JTextField(); //Hier maak je het daadwerkelijke textField aan (die je bovenaan gedeclareerd hebt.)
minuten = new JTextField(); // ..
uren = new JTextField(); // ..
secondenButton = new JButton("Reken seconden om"); //Hier maak je de button aan met tussen de haakjes de tekst die op de button komt te staan.
minutenButton = new JButton("Reken minuten om ");
urenButton = new JButton("Reken uren om ");
result = new JTextField("Hier komt uw antwoord.");
result.setEditable( false ); //Hier zorg je ervoor dat de textField niet Editable is dus dat hij niet te wijzigen valt.
secondenButton.addActionListener( eventHandler ); //Hier voeg je de EventHandler (de klasse die alle handelingen afhandelt aan de betreffende componenten toe. In dit geval voeg je dus de klasse EventHandler toe aan de button (omdat dit een ActionListener is gebruik ik addActionListener(.. ) ) (zie link 2)
minutenButton.addActionListener( eventHandler );
urenButton.addActionListener( eventHandler );
add(seconden); //Hier worden de componenten aan het paneel toegevoegd. (in dit geval dus dit paneel.) == this.add(seconden).
add(secondenButton);
add(minuten);
add(minutenButton);
add(uren);
add(urenButton);
add(result);
}
public String rekenSecondenOm( String seconden ) { //Dit is de methode om seconden om te rekenen de andere methodes gaan eigenlijk op dezelfde manier.
int aantalSeconden = 0; //Je maakt een locale variabele aan (een variabele die alleen binnen de methode bestaat) en geeft hem de standaard waarde 0.
try { //Probeer.
aantalSeconden = Integer.parseInt( seconden ); //aantalSeconden dat een string is word hier omgezet in een Integer (getal). Hier moeten dus getallen in worden gevult.
}catch(NumberFormatException n) {
return "Vul een echt getal in"; //Als er geen getal word ingevult, maar bijv. letters word dit aangeroepen (hij geeft dan namelijkeen NumberFormatException) hij valt die af door een string te returnen "Vul een echt getal in". Als de methode iets returned is hij klaar. en gaat hij uit de methode. (link 3)
}
//Dit word uitgevoerd als er niks gereturned is en er dus een getal is ingevult.
double minuten = aantalSeconden/60.00; // er word hier weer een lokale variabele gemaakt genaamd "minuten" en word gevult met het aantalSeconden / 60
double uren = aantalSeconden/3600.00; ..
return "Uw ingevulde aantal " + aantalSeconden + " seconden staat gelijk aan: \n " + //Hier returned de methode een string met het antwoord. De methode is nu uitgevoerd.
"aantal minuten " + minuten + "\n aantal uren: " + uren;
}
public String rekenMinutenOm( String minuten ) {
int aantalMinuten = 0;
try {
aantalMinuten = Integer.parseInt( minuten );
}catch(NumberFormatException n) {
return "Vul een echt getal in";
}
double seconden = aantalMinuten*60;
double uren = aantalMinuten/60;
return "Uw ingevulde aantal " + aantalMinuten + " minuten staat gelijk aan: \n " +
"aantal seconden " + seconden + "\n aantal uren: " + uren;
}
public String rekenUrenOm( String uren ) {
int aantalUren = 0;
try {
aantalUren = Integer.parseInt( uren );
}catch(NumberFormatException n) {
return "Vul een echt getal in";
}
double seconden = aantalUren*3600;
double minuten = aantalUren*60;
return "Uw ingevulde aantal " + aantalUren + " uren staat gelijk aan: \n " +
"aantal seconden " + seconden + "\n aantal minuten: " + minuten;
}
private class EventHandler implements ActionListener { //De private klasse EventHandler die het Interface ActionListener implementeert. (link 4)
public void actionPerformed(ActionEvent e) { //Als er een actie word uitgevoerd (die is bijv. als je op een button klikt. (waar de klasse aan toegevoerd is (zie AddActionListener.. )
if(e.getSource() == secondenButton) { //Als de actie word uitgevoerd op secondenButton.
result.setText( rekenSecondenOm( seconden.getText() ) ); //Zet in result de text die de methode rekenSecondenOm( parameter: De text die is ingetypt in seconden (dit is het JTextField) ) returned LET OP! deze klasse kan bij seconden omdat het een private klasse is en seconden als private variabele van TijdOmrekenen gedeclareerd is
}
if(e.getSource() == minutenButton) {
result.setText( rekenMinutenOm( minuten.getText() ) ); //Hiervoor geldt hetzelfde
}
if(e.getSource() == urenButton ) {
result.setText( rekenUrenOm( uren.getText() ) ); //Hiervoor geldt hetzelfde.
}
}
}
public static void main (String args[]) { //Methode die word aangeroepen bij het starten van deze klasse.
TijdOmrekenen to = new TijdOmrekenen(); //Er word een nieuwe instantie van de klasse TijdOmrekenen gemaakt.
JFrame frame = new JFrame(); //Er word een nieuw JFrame aangemaakt. (link 5).
frame.setSize( 300, 400 ); //De grootte van het JFrame word gezet.
frame.setContentPane( to ); //Tijdomrekenen word als ContentPane (het paneel dat men kan zien) van het JFrame gezet.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Dit zorgt ervoor dat het progr. word afgesloten als men op kruisje klikt.
frame.pack(); //De componenten worden ingepakt. dit heeft met grootte etc te maken.
frame.setVisible( true ); //Het frame word zichtbaar gemaakt.
}
link1:BoxLayout http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html
link2:ActionListener http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html
link3:NumberFormatException http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NumberFormatException.html
link4 Inner Class (Private class): http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html (inner class is de officiele benaming voor een private class).
link5 JFrame: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html / http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html
extra link JPanel: http://java.sun.com/docs/books/tutorial/uiswing/components/panel.html / http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JPanel.html
}