Opdracht Java programmeren leren

Status
Niet open voor verdere reacties.

dannyvdberg

Nieuwe gebruiker
Lid geworden
12 apr 2013
Berichten
4
Hallo,

Ik ben nieuw op het forum, en ik ben bezig Java programmeren te leren. Ik zit nu bij een opdracht wat niet lukt, en ik weet niet wat ik fout doe??

De opdracht is: Maak een applicatie met drie knoppen en een tekstvak. Bij elke knop hoort een eigen tekst, dat wil zeggen als je op een knop klikt, verandert de tekst in het tekstvak.

Hieronder is mijn broncode. Ik zal graag willen weten wat ik moet veranderen.

Bedankt!

Code:
import javax.swing.*; //klasse importeren
import java.awt.event.*; //klasse importeren

public class Vb0203 extends JFrame  
{

	
	
	public static void main (String [] args) { //main methode
		
		JFrame frame = new Vb0203(); // venster object aanmaken
		frame.setSize ( 400, 200); // afmetingen instellen
		frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE); // sluitknop aanmaken
		frame.setTitle ("Venster"); // titel
		JPanel paneel = new Paneel (); // paneel opbject aanmaken, en de constructor wordt aangeroepen
		frame.setContentPane ( paneel ); // inhoud van het venster aanmaken
		frame.setVisible (true); // venster zichtbaar maken
		
	}
	
	}
	
	class Paneel extends JPanel { //een nieuwe klasse
		
		private JButton knop, knop1, knop2; // object knop aanmaken declareren
		private JTextField tekstvak; // object tekstvak aanmaken en declareren
	
		
		public Paneel () { // nieuwe object aanmaken, de constructor maakt een knopobject en een tekstvakobject en voegt deze toe aan het paneel
			
			knop = new JButton ("Klik"); //object aanmaken
			knop.addActionListener ( new KnopHandler1() );
			
			knop1 = new JButton ("klik1");
			knop.addActionListener ( new KnopHandler2() );
			
			knop2 = new JButton ("klik2");
		    knop.addActionListener ( new KnopHandler3() );
			
			tekstvak = new JTextField (10); //object aanmaken
			
			add (knop); // object toevoegen aan het paneel
			add (knop1); //object toevoegen aan het paneel
			add (knop2); //object toevoegen aan het paneel
			add (tekstvak); // object toevoegen aan het paneel
	
		}
	
	
	class KnopHandler1 implements ActionListener { //inwendige klasse
		
		public void actionPerformed ( ActionEvent a) { // methode met opdrachten
			
			tekstvak.setText ("a"); //opdracht opbject knop
			
		}
	}
	
	class KnopHandler2 implements ActionListener { //inwendige klasse
		
		public void actionPerformed ( ActionEvent b) { // methode met opdrachten
			
			tekstvak.setText ("b"); //opdracht opbject knop
			
		}
	}
	
	class KnopHandler3 implements ActionListener { //inwendige klasse
		
		public void actionPerformed ( ActionEvent c) { // methode met opdrachten
			
			tekstvak.setText ("c"); //opdracht opbject knop
			
		}
	}
	
}
 
Laatst bewerkt door een moderator:
ik ken java script van websites maar waarvoor dient gewoon java programeren?
van waar haal je die oefeningen?
 
Ik heb deze oefeningen uit de boek: En dan is er... Java

Ik richt me vooral op het maken en programmeren van applicaties in Java
 
Laatst bewerkt door een moderator:
Beste Danny,

Je voegt de actionlistener drie keer aan dezelfde knop toe. Hierdoor worden alle action listeners aangeroepen beginnend bij de laatst toegevoegde. In jouw geval wordt de text dus eerst c daarna b en daarna a (jij ziet alleen maar a, omdat de executie te snel is om te zien).

Verander

Code:
knop.addActionListener(...)

naar
Code:
knop1.addActio...
knop2.addActio..
knop3.addActio..

In dit geval zou je ook één actionlistener kunnen maken en een onderscheid kunnen maken in de knop die wordt geklikt.
Code:
class KnopHandler implements ActionListener { //inwendige klasse
	public void actionPerformed ( ActionEvent a) { // methode met opdrachten
		if(a.getSource() == knop1) {	
			tekstvak.setText ("a"); //opdracht opbject knop
		}else if(a.getSource() == knop2) {
                        tekstvak.setText("b");
                }else if(a.getSource() == knop3) {
                        tekstvak.setText("c");
                }
       }
}

@Misterwinner

Javascript en Java zijn twee heel verschillende werelden en talen met hun eigen voor- en nadelen. Java wordt vaak gebruikt om programma's te creëren en javascript vaak wordt gebruikt om dynamiek aan je webpagina's te geven.

Een leuke site met java oefeningen (voor beginners en gevorderden) vind ik http://codingbat.com/

Als je java wilt leren kan ik je aanraden een java boek te lezen daarnaast vond ik zelf de tutorials op www.thenewboston.com heel leuk en leerzaam.

Groeten,
NewbiProgrammer
 
Laatst bewerkt:
Beste Newbi,

Bedankt voor u bericht!

Ik heb de code gebruikt om een actionlistener te maken, en dan wil ik de class gaan uitvoeren maar dan krijg ik de volgende foutmelding:

--------------------Configuration: Vb0203 - JDK version 1.7.0_17 <Default> - <Default>--------------------
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1090)
at java.awt.Container.add(Container.java:410)
at Paneel.<init>(Vb0203.java:44)
at Vb0203.main(Vb0203.java:16)

Process completed.

Groetjes,

Danny
 
Laatst bewerkt door een moderator:
Beste Danny,

Een nullpointer duidt op een variabele die niet geïnitialiseerd is waardoor er een methode aanroep op een null wordt aangeroepen (dit kan niet). Wil je jouw nieuwe code plaatsen, want als ik de code uit je eerste post aanpas werkt het programma gewoon goed.

Hieronder staat mijn code. Ik denk dat jij vergeten bent de handler ook aan de andere knoppen toe te voegen. Het voordeel van één handler gebruiken is dat er maar één handler object hoeft te worden aangemaakt; dit spaart geheugen.

Code:
import javax.swing.*; //klasse importeren
import java.awt.event.*; //klasse importeren

public class Vb0203 extends JFrame  
{

	
	
	public static void main (String [] args) { //main methode
		
		JFrame frame = new Vb0203(); // venster object aanmaken
		frame.setSize ( 400, 200); // afmetingen instellen
		frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE); // sluitknop aanmaken
		frame.setTitle ("Venster"); // titel
		JPanel paneel = new Paneel (); // paneel opbject aanmaken, en de constructor wordt aangeroepen
		frame.setContentPane ( paneel ); // inhoud van het venster aanmaken
		frame.setVisible (true); // venster zichtbaar maken
		
	}
	
	}
	
	class Paneel extends JPanel { //een nieuwe klasse
		
		private JButton knop, knop1, knop2; // object knop aanmaken declareren
		private JTextField tekstvak; // object tekstvak aanmaken en declareren
	
		
		public Paneel () { // nieuwe object aanmaken, de constructor maakt een knopobject en een tekstvakobject en voegt deze toe aan het paneel
			
			knop = new JButton ("Klik"); //object aanmaken
			knop1 = new JButton("Klik1");
			knop2 = new JButton("Klik2");
			
			//Het voordeel hiervan is dat er maar één handler object moet worden aangemaakt. Dit spaart weer geheugen.
			KnopHandler1 knoppenHandler = new KnopHandler1();
			knop.addActionListener ( knoppenHandler );
			
			//ik denk dat je vergeten bent de handler ook aan deze knoppen toe te voegen.
			knop1.addActionListener( knoppenHandler );
			knop2.addActionListener( knoppenHandler );
			
			tekstvak = new JTextField (10); //object aanmaken
			
			add (knop); // object toevoegen aan het paneel
			add (knop1); //object toevoegen aan het paneel
			add (knop2); //object toevoegen aan het paneel
			add (tekstvak); // object toevoegen aan het paneel
	
		}
	
	
	private class KnopHandler1 implements ActionListener { //inwendige klasse
		
		public void actionPerformed ( ActionEvent a) { // methode met opdrachten
                        //merk op dat ik geen haakjes bij de if else constructie gebruik. Dit is geen fout, maar is legitieme java-code als er maar één regel na de if of else komt anders moeten er wel 'curly brackets' omheen.
			if(a.getSource() == knop)
				tekstvak.setText ("a"); //opdracht opbject knop		
			else if(a.getSource() == knop1)
				tekstvak.setText("b");
			else if(a.getSource() == knop2)
				tekstvak.setText("c");
		}
	}	
}

p.s. een goede manier om nullpointers op te sporen is d.m.v. een debugger - breakpoints in de code zetten en stap voor stap de code doorlopen totdat je programma crashed.

Groet,
NewbiProgrammer
 
Laatst bewerkt:
Het is gelukt, bedankt Newbi!
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan