eindtijd berekenen

Status
Niet open voor verdere reacties.

cosmo2003

Nieuwe gebruiker
Lid geworden
10 feb 2011
Berichten
4
Beste mensen,

ik ben onlangs begonnen met een zelfstudie java programmeren. Ik gebruik het boek: java de basis. Ik moet nu en programma maken waarbij een gebruiken een begintijd (in uren en minuten) moet invoeren en een tijdsduur (in minuten). Bij een klik op een button (berekenknop) verschijnt in een apart veld de eindtijd van de afspraak. Ik heb onderstaande code gemaakt en krijg geen foutmeldingen in eclipse. Wanneer ik het programma laat draaien en een begintijd invoer en vervolgens op de berekenknop klik, gebeurd er niets. Het wil dus niet werken. Ik ben nu inmiddels 4 weken verder maar ik weet echt niet hoe ik dit moet oplossen. Weet iemand wat ik fout doe? Ik wordt er moedeloos van. Zie onderstaande code.

klasse 1
package h02;


import javax.swing.*;



public class Eindtijd extends JFrame
{

//maak een venster en stel enkele eigenschappen ervan in;
//geeft het venster een paneel als inhoud
public Eindtijd()
{
JFrame venster = new JFrame();
//300 horizontaal ruimte voor label en tekstvak
//250 verticaal: ruimte voor twee regels invoer,
// knop en tekstvak voor resultaat
venster.setSize(350,250);
venster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
venster.setTitle("Eindtijd bepalen");
venster.setLocation(100,50);// niet helemaal linksboven


JPanel hoofdpaneel = new Eindtijdpaneel();
venster.add(hoofdpaneel);
venster.setVisible(true);
}

public static void main( String[ ]args)
{
new Eindtijd();
}
}

klasse 2


package h02;

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


public class Eindtijdpaneel extends JPanel implements ActionListener
{

private JTextField urenVeld;
private JTextField minutenVeld;
private JTextField tijdsduurVeld;
private JButton berekenknop;
private JTextArea resultaatveld;

/*
* maak paneel met invoervelden en berekenknop
*/
public Eindtijdpaneel()
{
berekenknop = new JButton (" Bereken eindtijd");
berekenknop.addActionListener(this);
// tekstvakken met willekeurige defaultwaarden
// groot genoeg voor een getal van 5 cijfers
urenVeld = new JTextField("",2);
urenVeld.addActionListener(this);
minutenVeld = new JTextField("", 2);
minutenVeld.addActionListener(this);
tijdsduurVeld = new JTextField("", 5);
tijdsduurVeld.addActionListener(this);

//6 regels van 25 tekens
resultaatveld = new JTextArea(6,25);
this.setBackground(Color.CYAN);
// voeg de elementen toe aan het paneel
add(new JLabel("Begintijd Uren"));
add(urenVeld);
add(new JLabel("Minuten"));
add(minutenVeld);
add(new JLabel("Tijdsduur in minuten"));
add(tijdsduurVeld);
add(berekenknop);
add(resultaatveld);
}
/*
* bereken de resultaten en meld de uitkomst
*/
public void toonResultaat(int aantalUren, int aantalMinuten, int totaleDuur )
{
int urenRes = (totaleDuur/60)+ aantalUren;
int minutenRes = (totaleDuur% 60) + aantalMinuten ;

String toonResultaat = " De eindtijd is: " + urenRes +
" uur " + minutenRes + " minuten ";



resultaatveld.setText(toonResultaat);

}

/*
* haal gegevens op uit de velden en roep de methode
* toonReslutaat aan
*/
public void actionPerformed(ActionEvent e)
{
int aantalUren = Integer.parseInt(urenVeld.getText());
int aantalMinuten = Integer.parseInt(minutenVeld.getText());
int totaleDuur = Integer.parseInt(resultaatveld.getText());
toonResultaat(totaleDuur, aantalUren, aantalMinuten);

}



}


:(:(:(
 
koop een ander boek

Code:
public class Eindtijd extends JFrame {
	public Eindtijd() {
		super("Eindtijd bepalen");
		setSize(350, 250);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocation(100, 50);// niet helemaal linksboven
		add(new Eindtijdpaneel());
		setVisible(true);
	}
	public static void main(String[] args) {
		new Eindtijd();
	}
}


Code:
public class Eindtijdpaneel extends JPanel{
	private JTextField urenVeld;
	private JTextField minutenVeld;
	private JTextField tijdsduurVeld;
	private JButton berekenknop;
	private JTextArea resultaatveld;

	/**
	 * maak paneel met invoervelden en berekenknop
	 */
	public Eindtijdpaneel() {
		berekenknop = new JButton(" Bereken eindtijd");
		berekenknop.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int aantalUren = Integer.parseInt(urenVeld.getText());
				int aantalMinuten = Integer.parseInt(minutenVeld.getText());
				int totaleDuur = Integer.parseInt(tijdsduurVeld.getText());
				toonResultaat(totaleDuur, aantalUren, aantalMinuten);
			}
		});
		urenVeld = new JTextField("", 2);
		minutenVeld = new JTextField("", 2);
		tijdsduurVeld = new JTextField("", 5);
		resultaatveld = new JTextArea(6, 25);
		this.setBackground(Color.CYAN);
		add(new JLabel("Begintijd Uren"));
		add(urenVeld);
		add(new JLabel("Minuten"));
		add(minutenVeld);
		add(new JLabel("Tijdsduur in minuten"));
		add(tijdsduurVeld);
		add(berekenknop);
		add(resultaatveld);
	}

	/**
	 * bereken de resultaten en meld de uitkomst
	 */
	public void toonResultaat(int aantalUren, int aantalMinuten, int totaleDuur) {
		int urenRes = (totaleDuur / 60) + aantalUren;
		int minutenRes = (totaleDuur % 60) + aantalMinuten;
		String toonResultaat = " De eindtijd is: " + urenRes + " uur "
				+ minutenRes + " minuten ";
		resultaatveld.setText(toonResultaat);
	}
}
 
Bedankt voor je hulp! Ik denk niet dat ik aan de hand van dit boek deze oplossing had kunnen bedenken. Welk boek zou jij adviseren?
 
Beste Cosmo,

Ik heb je code gelezen en denk dat jouw programma gaat werken als je een paar dingen verandert:
Alleen de bereken knop moet een actionlistener hebben.
Dus de declaraties bij de textvelden weghalen.
Als je nog een resetknop wilt toevoegen die de velden leegt, moet je daarvoor ook de actionlistener declareren dus je krijgt dan:
berekenknop.addActionListener(this);
resetknop.addActionListener(this);
Maar probeer het eerst eens met alleen de berekenknop.
Gebruik je 2 knoppen dan moet je met getSource() gaan werken:

public void actionPerformed(ActionEvent e){
if(e.getSource() == berekenknop){
.......
.......
}
else{
.......
.......
}
}

Ik hoop dat jouw programma nu gaat werken.
Groetjes,

Kees (PlusPlus)
 
Beste plusplus

heb je dit gezien



public class Eindtijd extends JFrame{
public Eindtijd(){
JFrame venster = new JFrame();

dat is toch een hoogstandje van een boek niet.

maar cosmo Ik stuur je anders wel es een mailtje met wat leuke docs java2s kan je bekijken hoe bepaalde zaken gedaan worden maar een cursus is altijd aangewezen voor object orientend door te hebben.
 
Beste kanikavanbis, ik kan alle hulp gebruiken, dus graag!


Groeten,

cosmo2003
 
Beste Kenikavanbis,

Ja daar heb ik mij ook over verbaast want ik heb dat boek ook.
Toch was volgens mij Cosmo's programma bijna goed.
Hij had alleen iets te veel gedaan.
Maar in het begin is het ook wel even wennen voor je een beetje kijk hebt op het "gebeurtenisgestuurde" gebeuren.

Groetjes,
++
 
Bij mij wilt hij het programma 'Eindtijd Berekenen' nog geen eens opstarten:S

Ik ben sinds kort ook met het boek bezig Java De Basis. Bij mij geeft hij als ik hem wil runnen het volgende aan:

<terminated> EindBe [Java Application] C:\Program Files\Java\jre6\bin\javaw.exe (10 jul. 2011 12:44:48)

Hij wilt hem dus helemaal niet runnen.
Ik denk dat mijn programmalisting goed is:

KLASSE 1:

package h02_3;

import javax.swing.*;

public class EindBe extends JFrame
{
public EindBe()
{
JFrame venster = new JFrame();
venster.setSize(350,250);
venster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
venster.setTitle("Eindtijd Bepalen");
venster.setLocation(100,100);
JPanel hoofdpaneel = new EindBePa();
venster.add(hoofdpaneel);
venster.setVisible(true);
}

public static void main( String[ ] args)
{
new EindBePa();

}
}

KLASSE 2:

package h02_3;

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

public class EindBePa extends JPanel implements ActionListener
{
private JTextField veld1;
private JTextField veld2;
private JTextField veld3;
private JButton actieknop;
private JTextField resultaatveld;

public EindBePa()
{
actieknop = new JButton ("Bereken Eindtijd");
actieknop.addActionListener(this);
veld1 = new JTextField("16",2);
veld1.setToolTipText("Uren");
veld2 = new JTextField("24",2);
veld2.setToolTipText("Minuten");
veld3 = new JTextField("70",5);
veld3.setToolTipText("Minunten van afspraak");

resultaatveld = new JTextField(25);

add(new JLabel("Begintijd Uren"));
add(veld1);
add(new JLabel("Minuten"));
add(veld2);
add(new JLabel("Tijdsduur in minuten"));
add(veld3);
add(actieknop);
add(resultaatveld);
}

public void toonResultaat(int aantalUren, int aantalMinuten, int totaleDuur )
{
int urenRes = (totaleDuur / 60)+ aantalUren;
int minutenRes = (totaleDuur % 60) + aantalMinuten ;

String toonResultaat = " De eindtijd is: " + urenRes +
" uur " + minutenRes + " minuten ";



resultaatveld.setText(toonResultaat);

}

public void actionPerformed(ActionEvent e)
{
int aantalUren = Integer.parseInt(veld1.getText());
int aantalMinuten = Integer.parseInt(veld2.getText());
int totaleDuur = Integer.parseInt(resultaatveld.getText());
toonResultaat(totaleDuur, aantalUren, aantalMinuten);
}
}


---------------------------------------------------------------------

Kan iemand mij hiermee helpen? Documentjes met extra info over programmeren zijn ook altijd welkom!
Alvast bedankt!
 
Beste Mozz,

Het probleem zit hem erin dat je de klasse start die van JPanel erft (EindBePa). Dus je start eigenlijk een paneel zonder dat het een frame heeft waarin het paneel zich kan laten zien. Je zou dus de frameklasse moeten starten i.p.v. het paneel (EindBe)

Ook de code is niet erg netjes, omdat je een klasse hebt die al van een JFrame erft (dit is dus al een frame) en daar nog is een frame in maakt dus eigenlijk twee frames maakt, alleen de klasse (die dus ook een frame is) niet laat zien.

Deze kleine aanpassing zal het laten werken en het wordt er ook een stuk netter van.
Code:
public class EindBe extends JFrame {
	public EindBe() {
		setSize(350, 250);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Eindtijd Bepalen");
		setLocation(100, 100);
		JPanel hoofdpaneel = new EindBePa();
		add(hoofdpaneel);
		setVisible(true);
	}

	public static void main(String[] args) {
		new EindBe();

	}
}

Als je tutorials over programmeren zoekt kan ik je wijzen op de tutorials van thenewboston (www.thenewboston.com) deze zijn duidelijk en beginnen bij de basis, ze zijn wel in het engels.

p.s. wil je de volgende keer de code-tags gebruiken indien je code plaatst. [ c o d e ] [ / c o d e ] (zonder de spaties vanzelfsprekend).

Indien vragen, meld ze maar.

Met vriendelijke groet,
NewbiProgr
 
Laatst bewerkt:
Hartstikke bedankt NewbiProgr! Had ik (achteraf gezien) zelf ook wel moeten kunnen ontdekken maar kwam er maar niet achter. Ik zal volgende keer de code tags gebruiken en bedankt voor de url. Ik zal meteen even kijken..:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan