Java rekenmachine

Status
Niet open voor verdere reacties.
Dank je, KwarK!

Ik wist niet hoe ik de ene moest verwijderen dus ging ik maar door met twee topics, excuses!
 
Hey, ik zie al dat er vooruit gaan is geboekt met de mvc ;) Ik heb dus geprobeerd jouw code te runnen ennuh inderdaad kent hij ze niet, dat is omdat in jouw code dit doet:

model = new RekenModel();

Dat kan niet want jij roept de class RekenModel aan zonder argumenten, maar jouw model moet even copy paste ;)

public RekenModel( boolean setNummer, boolean setPlus, boolean setNul,
boolean setMin, boolean setMaal, boolean setDelen,
boolean setIs, boolean setNummerF, boolean setPlusF,
boolean setMinF, boolean setMaalF, boolean setLeegF,
boolean setDelenF, boolean setIsF, boolean setClearF)

zoveel argumenten hebben :) dus daarom vind de compiler het niet leuk omdat je te weinig argumenten mee gegeeft.

Ik kijk nu weer even verder en ik post wel als ik nog meer dingen zie

gr MouNt
 
@ MouNtant

Ik probeer nu voor de boolean in mijn model, het model in de main app met true aan te roepen maar dit lukt niet?

Of ik begrijp het ff niet of ik zie het niet, maar welke argumenten moet ik mijn model in het Paneel geven?

Dank,

Gr,

Srananmang
 
In me vorige post zie je hoeveel booleans je hebt in je model, dus als je jouw model roept zal je ook zoveel keer, true of false moeten meegeven. Ik weet niet wat ze doen dus ik heb ze allemaal true gemaakt:

model = new RekenModel(true, true, true, true, true, true,true, true, true,true, true, true, true, true, true);


gr MouNt
 
Ik heb aan je programmeer geklooit, ik vind het soms wat vaag, maar ik heb daadwerkelijk 0 errors maar wel nog nullpointers ik snap de structuur niet helemaal :), had zelf anders gedaan maar dat is puur persoonlijk:P

Krijg wel daadwerkelijk wat te zien dus misschien zit ik op de goede weg maar kweet niet of het me lukt ;(

gr MouNt

PS: waar gebruik je de booleans voor?
 
Laatst bewerkt:
@MouNtant

Dat had ik al geprobeerd, dat bedoelde ik ook in me vorige post. 15x true.

Maar misschien komt dit doordat ik in de public void van het model niet aangeef bij de booelans zoeits van setNummer = true; --> ik ga dit ff proberen, kijken of het succes oplevert.

Ik heb trouwens van de 15 booleans 7 die alleen tekst in een tekstvak zetten wanneer er op een button word geklikt, waarvan 1 die vanuit een array forloop letters invoert.

dan heb ik +-*/ operators en de = functie en 1 die vanuit een array forloop cijfers invoert

Ik zet ze nu ff allemaal op true?

Gr,

Srananmang
 
De booleans, wanneer ik op een knop klik moet er iets in het LCD scherm tevoorschijn komen en dit moet worden opgeslagen en dan kies ik een operator(+-*/) en weer een cijfer en dan = en dit werkte zonder MVC perfect!!!

Maar nu ik de MVC heb, dacht ik ik gebruik booleans voor de keuzes, heb ik klakkeloos uit mijn boek overgenomen.
 
Dit is wat ik nu heb:

Code:
package Package;

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

public class Rekenmachine extends JFrame
{
public static void main( String[] args )
{
/* Maak een frame*/
JFrame 	frame = new Rekenmachine ()								;
frame.setSize( 500, 500 )								;
frame.setLocationRelativeTo(null)						;
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )	;
frame.setTitle( "Game" )								;
frame.setContentPane( new RekenPaneel())				;
frame.setVisible( true )								;
}
}

class RekenPaneel extends JPanel
{
private RekenModel	 	model;
private RekenVC 			view;
private RekenC 			control;

public RekenPaneel()
{
	setLayout( new BorderLayout() );

	model = new RekenModel(true, true, true, true, true, true,true, true, true,true, true, true, true, true, true);
	
	view = new RekenVC( model );
	
	control = new RekenC( model, view );
	
	add( view, BorderLayout.NORTH );
	add( control, BorderLayout.CENTER );
	}
}

Code:
package Package;

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

public class RekenVC extends JPanel
{	/*voeg alles toe*/
private RekenModel model;	
public JTextField		tekstvak 		= new JTextField("Welkom! Bij de surinaamse rekenmachine van 'BiG$mOkE...",5);
public JTextField 		uitkomst		= new JTextField("0",5);

/* In de RekenPaneel maak ik de buttons aan in een GridLayout en deze komen in verschillende JPanels die ik in de BorderLayout plaats,
aan de Buttons en TextFields zitten actionlisteners en een knophandler voor de funny tekst*/
public RekenVC(RekenModel model) 
{
this.model = model;				

this						.setLayout(new GridLayout(2, 1));

uitkomst						.setEditable(false);
uitkomst						.setHorizontalAlignment( SwingConstants.CENTER );
uitkomst						.setBackground(new Color(147, 1, 20));
uitkomst						.setForeground(new Color(250, 250, 250));

tekstvak						.setEditable(false);
tekstvak						.setHorizontalAlignment( SwingConstants.CENTER );
tekstvak						.setBackground(new Color(147, 1, 20));
tekstvak						.setForeground(new Color(250, 250, 250));

this						.add(uitkomst);	
this						.add(tekstvak);											
}								
}

Code:
package Package;

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

public class RekenModel 
{	
private boolean setNummer, setPlus, setNul, setMin, setMaal, setDelen, setIs, 
setNummerF, setPlusF, setMinF, setMaalF, setLeegF, setDelenF, setIsF, setClearF;


public RekenModel(	boolean setNummer, 	boolean setPlus, 	boolean setNul, 
boolean setMin, 	boolean setMaal, 	boolean setDelen, 
boolean setIs, 		boolean setNummerF, boolean setPlusF, 
boolean setMinF, 	boolean setMaalF, 	boolean setLeegF, 
boolean setDelenF, 	boolean setIsF, 	boolean setClearF) 
{
this.setNummer	= setNummer;
this.setPlus	= setPlus;
this.setNul		= setNul;
this.setMin		= setMin;
this.setMaal	= setMaal;
this.setDelen	= setDelen;
this.setIs		= setIs;
this.setNummerF	= setNummerF;
this.setPlusF	= setPlusF;
this.setMinF	= setMinF;
this.setMaalF	= setMaalF;
this.setLeegF	= setLeegF;
this.setDelenF	= setDelenF;
this.setIsF		= setIsF;
this.setClearF	= setClearF;
}

public void setNummer(RekenC c)
{
for(int i = 0; i < 9; i++)
c.zet(c.namen[i]);
}
public void setPlus(RekenC c, RekenVC vc)
{
c.voorResultaat		=Double.parseDouble(vc.uitkomst.getText());
c.laatsteInvoer		="+";
vc.uitkomst.setText	("");
return;
}			
public void setNul(RekenC c)
{
c.zet("0");
}
public void setMin(RekenC c, RekenVC vc)
{
c.voorResultaat		=Double.parseDouble(vc.uitkomst.getText());
c.laatsteInvoer		="-";
vc.uitkomst.setText	("");
return;
}
public void setMaal(RekenC c, RekenVC vc)
{
c.voorResultaat		=Double.parseDouble(vc.uitkomst.getText());
c.laatsteInvoer		="*";
vc.uitkomst.setText	("");
return;
}
public void setDelen(RekenC c, RekenVC vc)
{
c.voorResultaat		=Double.parseDouble(vc.uitkomst.getText());
c.laatsteInvoer		="/";
vc.uitkomst.setText	("");
return;				
}
public void setIs(RekenC c, RekenVC vc)
{
c.vervolgResultaat=Double.parseDouble(vc.uitkomst.getText());
if	(c.laatsteInvoer.equals("/"))
c.resultaat	=	c.voorResultaat/c.vervolgResultaat;
else 	if	(c.laatsteInvoer.equals("*"))
c.resultaat	=	c.voorResultaat*c.vervolgResultaat;
else 	if	(c.laatsteInvoer.equals("-"))
c.resultaat	=	c.voorResultaat-c.vervolgResultaat;
else 	if	(c.laatsteInvoer.equals("+"))
c.resultaat	=	c.voorResultaat+c.vervolgResultaat;
/* Dit is er om te checken of de waarden vast worden gehouden*/							  			
System.out.println(""+c.voorResultaat+" "+c.resultaat+"");		
vc.uitkomst.setText(" "+c.resultaat);
c.laatsteInvoer="=";				
}


public void setNummerF(RekenVC vc, RekenC c)
{
for(int i = 0; i < 9; i++)
vc.tekstvak.setText(c.namenFunny[i]);
}
public void setPlusF(RekenVC vc)
{
vc.tekstvak.setText("Dat je hier een rekenmachine voor nodig hebt...");
}
public void setMinF(RekenVC vc)
{
vc.tekstvak.setText("Lukt dit niet uit het hoofd?");
}
public void setMaalF(RekenVC vc)
{
vc.tekstvak.setText("En we gaan vermenigvuldigen!");
}
public void setLeegF(RekenVC vc)
{
vc.tekstvak.setText("ERROR, START PC OPNIEUW OP");
}
public void setDelenF(RekenVC vc)
{
vc.tekstvak.setText("Door wat gaan we het delen?");
}
public void setIsF(RekenVC vc)
{
vc.tekstvak.setText("Is dit antwoord wel juist?");
}
public void setClearF(RekenVC vc)
{
vc.tekstvak.setText("Zo ff een leeg veld");
}
}

Code:
package Package;

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

public class RekenC extends JPanel
{
private RekenModel model;

private RekenVC view;

public Color			goud;	
public JButton 		Clear, is, plus, min, delen, maal, leeg, nul;
public JButton[]		nummersArray	= new JButton[9];
public String[]		namen			= {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
public String[]		namenFunny		= {"een", "twee", "drie", "vier", "vijf", "zes", "zeven", "acht", "negen"};
public String 			laatsteInvoer	= null;
public String    		vorigenr		= "=";
public double 			voorResultaat	= 0;
public double			vervolgResultaat= 0;
public double			resultaat;

public RekenC( RekenModel model, RekenVC view )
{
this.model = model;
this.view = view;

setLayout						(new BorderLayout());
goud 							= new Color ( 147, 147, 0 );
KnopHandler	aap 				= new KnopHandler();
CijferHandler calc				= new CijferHandler();				

JPanel paneelcijfers			= new JPanel();				
paneelcijfers					.setLayout(new GridLayout(4, 3));	

for(int i = 0; i < 9; i++)
{
nummersArray[i] = new JButton(namen[i]);
nummersArray[i]	.addActionListener(calc);
nummersArray[i]	.addActionListener(aap);
paneelcijfers.add(nummersArray[i]);
}

nummersArray[0]					.setBackground(goud);
nummersArray[2]					.setBackground(goud);				
nummersArray[4]					.setBackground(goud);				
nummersArray[6]					.setBackground(goud);
nummersArray[8]					.setBackground(goud);
//nul								.setBackground(goud);	
	
paneelcijfers.add(leeg		 	= new JButton("" ));
leeg							.addActionListener(aap);						
//paneelcijfers.add(nul			= new JButton("0"));
//nul								.addActionListener(calc);
paneelcijfers.add(Clear 		= new JButton("C"));
Clear							.addActionListener(aap);				
//Zal wel calc zijn??
Clear							.addActionListener(calc);								

JPanel paneelkeuze				= new JPanel();
paneelkeuze						.setLayout(new GridLayout(4, 1));

paneelkeuze.add(plus 			= new JButton("+"));					
paneelkeuze.add(min			 	= new JButton("-"));										
paneelkeuze.add(maal		 	= new JButton("x"));								
paneelkeuze.add(delen			= new JButton(":"));								
min								.setBackground(goud);				
delen							.setBackground(goud);
plus							.addActionListener(calc);
min								.addActionListener(calc);	
maal							.addActionListener(calc);	
delen							.addActionListener(calc);
plus							.addActionListener(aap);
min								.addActionListener(aap);	
maal							.addActionListener(aap);	
delen							.addActionListener(aap);										

JPanel paneelis					= new JPanel();				
paneelis						.setLayout(new GridLayout(1, 1));

paneelis						.add(is	= new JButton("="));						
paneelis						.setBackground(goud);
is								.addActionListener(calc);						
is								.addActionListener(aap);

add(paneelcijfers,BorderLayout.CENTER);
add(paneelis,BorderLayout.SOUTH);
add(paneelkeuze, BorderLayout.EAST);
}											

public	void zet(String no)
{
if((view.uitkomst.getText()).equals("0"))
view.uitkomst.setText(no);

else 	if(	laatsteInvoer=="=")			
{
view.uitkomst.setText(no);
laatsteInvoer=null;
}
else 		view.uitkomst.setText(view.uitkomst.getText()+no);
}	

/* Elke nummer krijgt hier een waarde en wanneer je op het nummer klikt krijgt het nummer de waarde van zijn knop */      
class CijferHandler implements ActionListener
{
public void actionPerformed(ActionEvent invoer)
{
	RekenC c = new RekenC(model,view);	
	RekenVC vc = new RekenVC(model);

for(int i = 0; i < 9; i++)

if(invoer.getSource()==nummersArray[i])
{

model.setNummer(c);
}	
else	if(invoer.getSource()==nul)
{
model.setNul(c);
}
else 	if(invoer.getSource()==plus)
{
model.setPlus(c,vc);
}
else	if(invoer.getSource()==min)
{
model.setMin(c,vc);
}
else 	if(invoer.getSource()==maal)
{
model.setMaal(c,vc);
}
else 	if(invoer.getSource()==delen)
{
model.setDelen(c,vc);
}
else 	if(invoer.getSource()==is)	
{
model.setIs(c,vc);
}
}
}

/* Hier maak ik de KnopHandler aan voor de funny teksten */	    
class KnopHandler implements ActionListener 
{
public void actionPerformed(ActionEvent funny)
{
for(int i = 0; i < 9; i++)

if(funny.getSource()==nummersArray[i])
{
	RekenC c = new RekenC(model,view);
model.setNummerF(view,c);
}
else	if(funny.getSource()==plus)
{
model.setPlusF(view);
}
else 	if(funny.getSource()==min)
{
model.setMinF(view);
}
else 	if(funny.getSource()==maal)
{
model.setMaalF(view);
}
else 	if(funny.getSource()==leeg)
{
model.setLeegF(view);
}
else 	if(funny.getSource()==delen)
{
model.setDelenF(view);
}				
else 	if(funny.getSource()==is)
{
model.setIsF(view);
}
else 	if(funny.getSource()==Clear)
{
model.setClearF(view);
}							
}
}



/* Om de tekstvak schoon te vegen*/
class ClearListener implements ActionListener 
{
boolean   		startnr			= true;	

public void actionPerformed(ActionEvent schoon) 
{
startnr 		= true	;
view.uitkomst.setText		("0")	;
vorigenr  	= "="	;
}
}				


}


In je code probeer je velden, knoppen etc aan te roepen in andere klassen terwijl je die ze niet kennen, dat kan niet. Dat heb ik gefixed door overal elkaar te kennen, maar dit is natuurlijk niet zo mooi... Ik weet niks anders ik snap helaas de structuur niet MAar misschien heb je wel iets hieraan! Ik probeer nog wel effies verder te gaan en hopelijk komt er nog wat uit waar je misschien wat aan hebt...

gr MouNt
 
Ik heb jouw code ff gecompileerd en ik heb het grondig doorgenomen en ik zie dat je de classes met elkaar laat linken door view.,,, en bij het model en controller duidelijk de C aangeven enzo, ik heb hier zeker wat aan, ik ben al blij dat jouw code iets op het scherm laat zien, nu kan ik bep. onderdelen van de gewijzigde code in mijn code stoppen, en bijwerken. Ik ga nu eerst ff eten, BRB

En ik stel je hulp echt zeer op prijs';)
 
Ook net even gegeten, Ik heb je code gewoon aangepast zodat het werkte of in ieder geval geen errors, zlef moet je kijken of het MVC is en hoe je het verder kan doen en/of het beter kan! Het is voor jouw cijfer :) Nogmaals ik weet niet of de code goed is en of het goede MVC is. Ik heb de gekregen code gewoon wat aangepast

Als je hem test komen er nog wel errors, die moet je zelf fixen want jij weet wel hoe en waar die vandaan komen ik zie ze zo 1,2,3, niet.

gr MouNt
 
Laatst bewerkt:
Ik ga er nu mee bezig... Ik laat wel weten wanneer/waar ik vast zit, maar echt bedankt voor nu, nu kan ik weer verder;)

Gr

Srananmang
 
Ik heb nu wel ff een vraag, waarom je er een package van hebt gemaakt? Dat begrijp ik niet?
 
Dat is omdat ik het in een package heb gezet, Ik werk met Eclipse, kon ook weg laten als ik een default package gebruik, maar dit had ik ergens anders in persoonlijk projecten al.

Iets duidelijker:
Ik gebruik Eclipse, in dit programma kan ik allerlei code typ en hij checkt het ook. Dit kan je vergelijken ( vind ik ) met MS word. Hij doet ook de spellings controle en eclipse doet dat soort van ook ;) Eclipse kan je alles in project zetten en die kan je da weer onverdelen in packages. Is wel handig! ;)

Ik ga offline! ik wens je suc6 en hoop dat alles goed komt! Kweet niet wanneer ik weer online ben maar er zijn nog flink wat mensen hier die je vast de goede richting op kunnnen wijzen! Nogmaals Suc6!

gr MouNt
 
Laatst bewerkt:
@MouNtant, Echt bedank!

Alleen lukt het nu niet verder maar dat moet ik ff uitpluizen.
Iemand een idee, in de bijlage zit mijn project (huidige code) De rekenmachine zie je(gelukkiig) de funny tekst doet het alleen de cijfers 0 tot 9 werken niet, dan gooit hij direct alle cijfers erin.
 
Beste sr,

Het feit dat in een keer alle nummers worden toegevoegd zit hem in je model. Daar loop je van je view de namenlijst door (dit zijn waarschijnlijk je cijfers) en dan roep je voor elk van deze namen (je cijfers dus) de zet methode aan.

Hierbij wil ik wel zeggen dat het niet netjes is om een geheel View mee te geven aan je model, maar dat terzijde een kleine aanpassing lost dit op (al is het niet heel nette code, je zou ervoor moeten zorgen dat er een cijfer wordt meegegeven aan de methode en geen view).

Hierbij een simpele oplossing (nog een keer vermelden, dit is dus niet echt nette code).
Code:
//In je handler
if(invoer.getSource()==nummersArray[i])
{
        String geklikteNummer = nummersArray[i].getText();
	model.setNummer(c, geklikteNummer);
}

-----------------
//In je model

 public void setNummer(RekenC c, String nummer)
{
       c.zet(nummer);
}

Het is niet bot bedoeld, maar ik wilde het gewoon even melden ;)

Met vriendelijke groet,
Bram
 
Laatst bewerkt:
YES!!!!

Ik heb de calculator compleet met MVC, arrays hahaha Hij doet het ook nog goed genoeg.

Nu heb ik een laatste verzoek...

Dit ga ik nu ff doorlezen in het boek en ff kijken hoe dit te doen is.

Mijn laatste onderdeel(dan ben ik echt!!! klaaar!!) is een TRY/CATCH in zetten. Hierbij wil ik dat op het scherm voor ongeveer 10 seconden bij elke operator verschillende tekst komt. Een soort pauze, alsof de rekenmachine meot nadenken over het berekenen van de opgave.

Zoals ik toets 4 x 9 = --> dan komt er in het uitkomst vak " Wow, gaan we vermenigvuldigen, wacht ff hier ben ik niet zo goed in!!! " en na 10 sec. laat het de uitkomst zien...

Wie enkele iedeen heeft graag:D Ik ga nu lezen en kijken of ik zelf iets kan creeren

Alvast bedankt....

Srananmang

ZIE NIEUWE CODE 1ste POST
 
Try{ Thread.sleep(10000); }
Catch(Exception ex) { // doe iets }

Als je thrwad sleep neerzet geeft een beetje IDE aan zoals eclipse dat je het moet
surounden met try/catch

Zoiets bedoel je denk ik?
 
Even op Westland voortbordurend:

Code:
try {
    lcdscherm.setText("Ik wacht even 10 seconden ... );
    Thread.sleep(10000); //Vergeet niet, nu staat het hele programma stil (omdat je de main-thread laat slapen).
catch(InterruptedException interrupted) {
    System.out.println(interrupted.getMessage()); //er is iets fout gegaan, de fout verschijnt in je console.
}

Zelf prefereer ik een timer boven een try catch blok, omdat je de tekst dan elke seconde kan laten veranderen, maarja try catch staat in je opdracht:)

Kind regards,
NewbiProgrammer
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan