Probleem met actionlisteners en changelisteners

Status
Niet open voor verdere reacties.

SVENeRGy

Gebruiker
Lid geworden
3 sep 2007
Berichten
13
Hallo,

Kan mij iemand helpen met hetvolgende probleem aub?
Sorry voor de vele code, ik hoop dat het nu niet onduidelijk wordt.

Aangezien deze opdracht met MVC patroon werkt zal ik ze ook als volgt presenteren.
Eerst mijn model
Dit zijn 2 klassen, maar 1 van de 2 is slechts foutafhandeling.

Klasse TestModel:
Code:
/**
 * 
 */
package testprogramma.model;


/**
 * @author ikke
 *
 */
public class TestModel {
	
	private int aantalMensen;
	private int maxLeeftijd;
	private String uit;
	
	public TestModel(int m, int l) throws TooSmallException {  
		if (m < 1) {
			throw new TooSmallException("Het moeten er minstens één zijn.");
		}
        
		if (l <= 0)
		{
			throw new TooSmallException("Leeftijd moet groter dan nul zijn.");
		}
        
		this.aantalMensen = m;
		this.maxLeeftijd = l;
	}
	
	public void GenereerData () {	
		this.uit = "Er zijn " + this.aantalMensen + " mensen, met een maximum leeftijd van " + this.maxLeeftijd + " jaar";
		System.out.println(this.uit);
	}
	
	public void setAantalMensen(int m) throws TooSmallException {	
		if (m < 1) {
			throw new TooSmallException("Het moeten er minstens één zijn.");
		}
		this.aantalMensen = m;		
	}
	
	public int getAantalMensen() {
		return this.aantalMensen;
	}
	
	public void setMaxLeeftijd (int l) throws TooSmallException {	
		if (l <= 0)
		{
			throw new TooSmallException("Leeftijd moet groter dan nul zijn.");
		}
		this.maxLeeftijd = l;
	}
	
	public int getMaxLeeftijd() {
		return this.maxLeeftijd;
	}

	public String Oplossing() {
		return this.uit;
	}

	
	/**
	 * Commandline versie
	 * @param args
	 * @throws TooSmallException 
	 */
	public static void main(String[] args) throws TooSmallException {
		
		TestModel test = new TestModel(25, 60);
		test.GenereerData();
	}

}

Klasse TooSmallException
Code:
package testprogramma.model;

public class TooSmallException extends Exception {
	
	/**
	 * Constructor voor een NegativeValueException.
	 * @param errorTekst een String met een pasende omschrijving
	 * van de situatie.
	 */
	public TooSmallException(String errorTekst){
		super(errorTekst);
	}	
}

Zo, nu de views.
dit bestaat uit 3 panels die elk in een aparte klasse zitten. Deze komen samen op een Frame, (dit is ook een aparte klasse) die de mainklasse bevat.

Klasse KnoppenPanel
Code:
/**
 * 
 */
package testprogramma.view;

import javax.swing.JButton;
import javax.swing.JPanel;
import testprogramma.controllers.Exitlistener;

/**
 * @author ikke
 * klasse die 2 knopjes aanmaakt.
 *
 */
public class KnoppenPanel extends JPanel {
	
	//aanmaken van de knoppen
	private JButton btnGenereerData;
	private JButton btnCancel;
	
	public KnoppenPanel() {
		
		//declareren van de knoppen
		this.btnGenereerData = new JButton("Genereren");
		this.btnCancel = new JButton("Cancel");
		
		//toevoegen aan de panel
		this.add(this.btnGenereerData);
		this.add(this.btnCancel);
		
		//listener van de Cancel knop
		this.btnCancel.addActionListener(new Exitlistener());	
	}
}

Klasse SpinnerPanel
Code:
/**
 * 
 */
package testprogramma.view;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

/**
 * @author ikke
 * klasse die 2 spinners aanmaakt
 *
 */
public class SpinnerPanel extends JPanel {

	//aanmaken van de spinners
	private JSpinner spnrMensen;
	private JSpinner spnrLeeftijd;
	
	//aanmaken van de labels
	private JLabel lblMensen;
	private JLabel lblLeeftijd;
	
	public SpinnerPanel() {
		
		//declareren van de spinners met bijhorende labels en instellen van de spinners
		this.lblMensen = new JLabel("Aantal mensen");
		this.lblLeeftijd = new JLabel("Maximum leeftijd");
		this.spnrMensen = new JSpinner();
		this.spnrLeeftijd = new JSpinner();
		this.spnrMensen.setModel(new SpinnerNumberModel(100, 1, 1000, 1));
		this.spnrLeeftijd.setModel(new SpinnerNumberModel(60, 0, 120, 1));
		
		//toevoegen aan de panel
		this.add(this.lblMensen);
		this.add(this.spnrMensen);
		this.add(this.lblLeeftijd);
		this.add(this.spnrLeeftijd);	
	}	
}

Klasse OutputPanel
Code:
/**
 * 
 */
package testprogramma.view;

import javax.swing.JPanel;
import javax.swing.JTextArea;

/**
 * @author ikke
 * Klasse die de output laat zien in een textarea
 *
 */
public class OutputPanel extends JPanel {
	
	private JTextArea output;
	
	public OutputPanel() {
		
		//declareren van de textarea
		this.output = new JTextArea("Hier moet de string in komen die door het model gegenereerd wordt.");
		
		//toevoegen aan de panel
		this.add(this.output);
		
	}

}

Klasse MainFrame
Code:
/**
 * 
 */
package testprogramma.view;

import java.awt.BorderLayout;

import javax.swing.JFrame;


/**
 * @author ikke
 * klasse die 3 panels op een JFrame zet, bevat ook mainklasse
 *
 */
public class MainFrame extends JFrame {
	
	//atributen aanmaken
	private KnoppenPanel knopjes = new KnoppenPanel();
	private SpinnerPanel spinners = new SpinnerPanel();
	private OutputPanel uit = new OutputPanel();
	
	public MainFrame(String titel) {
		
		super(titel);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setLocation(200, 200);
		
		//toevoegen van de panels
		this.add(this.knopjes, BorderLayout.SOUTH);
		this.add(this.uit, BorderLayout.CENTER);
		this.add(this.spinners, BorderLayout.NORTH);
		
		//alles samenvoegen en ervoor zorgen dat er aan de frame niets veranderd kan worden
		this.pack();
		this.setResizable(false);
		this.setVisible(true);
	}
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new MainFrame("Dit is slechts een voorbeeld.");
	}

}

Nu nog enkel de controllers.
Deze moeten ook in externe klassen komen, en daar wringt het schoentje een beetje.

De enige klasse die me lukt is de ExitListener voor de Cancel knop, en die ziet er als volgt uit.
Code:
/**
 * 
 */
package testprogramma.controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @author ikke
 *
 */
public class Exitlistener implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("Alle taken worden gestopt en de toepassing wordt afgesloten");
		System.exit(0);
	}

}



Nu is het verder de bedoeling dat als ik je spinners instel op verschillende waarden, en ik druk dan op Genereer, de text in de textarea veranderd. Maar dit lukt me niet.
De klassen moeten afzonderlijk blijven, en de listeners moeten in aparte klassen staan.
Kan hier iemand mij mee helpen aub?


mvg
Sven
 
Laatst bewerkt:
ondertussen ben ik mijn model statische elementen aaan het toevoegen, zodat ik ze in de listeners kan gebruiken. Hoort dit wel zo?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan