Archief - Java

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Artheur

Legacy Member
Ik heb een vraagje in verband met mijn project waarmee ik een ijskast moet creeëren met
allerlei soorten andere onderdelen zoals een knop voor te sluiten/openen, ....

Een ander deel van dit project is een bijbehorende barkruk, die ik moet kunnen
verhogen/verlagen met 2 aparte knoppen en het kussen moet van kleur kunnen veranderen
met de kleurnaam die je ingeeft in het bijbehorende tekstvak.

Nu zit ik vast bij het deel waar ik aan mijn tekstvak een tekstvakhandler toevoeg,
waardoor ik met het ingeven van een kleurnaam de kleur laat veranderen van het kussen
van de barkruk.

Alles wat ik heb gecreeërd staat in een paintComponent. Dit is de code die in men
tekstvakhandler sta voor het desbetreffende tekstvak van de kleurnaam.

public class TekstvakHandler2 implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
// txtKleur
String strKleur = tekstKleur.getText();
repaint();
}
}

Voor de kleur te doen veranderen van het kussen van de barkruk heb ik geprobeerd om met een
if & equal te werken:

if(strKleur.equals("test")){
g.setColor(Color.PINK);
}


Maar nu vraag ik mij af waar ik dit moet plaatsen, ik heb al allerlei geprobeerd en niets werkt.
Waarschijnlijk heb ik ergens een fout gemaakt of gewoon een foute redenering gebruikt voor het
te doen werken.

Dus aan iedereen die enige kennis heeft van java, kunnen jullie mij helpen dit probleem op te lossen?

Dank op voorhand! :D

Mee

Legacy Member
Dat if-statement net voor die repaint zetten is te voor de hand liggend zeker? :)

NeverwinterX

Legacy Member
Die if-statement kan je vanboven in de paintcomponent zetten.
Je tekent trouwens toch de barkruk daarna hè? Want enkel de kleur setten is niet voldoende: dat zet enkel de kleur juist voor de volgende tekenacties.
Toon anders de hele paintcomponent als het nog niet lukt.

edit: oh en ik zie net dat strKleur een lokale variabele is in de actionperformed. Als je dat wilt kunnen gebruiken in de paintcomponent zul je dat een member field moeten maken van de klasse.

Artheur

Legacy Member
@Mee: idd, dat werkt niet :(

NeverwinterX zei:
Die if-statement kan je vanboven in de paintcomponent zetten.
Je tekent trouwens toch de barkruk daarna hè? Want enkel de kleur setten is niet voldoende: dat zet enkel de kleur juist voor de volgende tekenacties.
Toon anders de hele paintcomponent als het nog niet lukt.

edit: oh en ik zie net dat strKleur een lokale variabele is in de actionperformed. Als je dat wilt kunnen gebruiken in de paintcomponent zul je dat een member field moeten maken van de klasse.

bedoel je soms dit voor strKleur? private String strKleur = ""; :D

Dit is men hele paintComponent:

public void paintComponent(Graphics g) {
super.paintComponent(g);
if(strKleur.equals("test")){
g.setColor(Color.PINK);
}
g.setColor(Color.LIGHT_GRAY);
g.fillRect(470, 200, 250, 350);
g.setColor(Color.BLACK);
g.fillRect(708, 250, 5, 250);
g.fillRect(920, 370, 100, 35);
g.setColor(Color.DARK_GRAY);
g.fillRect(960, 405, 20, 145);
g.fillRect(920, 505, 100, 15);
g.fillRect(920, 515, 15, 35);
g.fillRect(1005, 515, 15, 35);
}

NeverwinterX

Legacy Member
Artheur zei:
@Mee: idd, dat werkt niet :(



bedoel je soms dit voor strKleur? private String strKleur = ""; :D

Dit is men hele paintComponent:

public void paintComponent(Graphics g) {
super.paintComponent(g);
if(strKleur.equals("test")){
g.setColor(Color.PINK);
}
g.setColor(Color.LIGHT_GRAY);
g.fillRect(470, 200, 250, 350);
g.setColor(Color.BLACK);
g.fillRect(708, 250, 5, 250);
g.fillRect(920, 370, 100, 35);
g.setColor(Color.DARK_GRAY);
g.fillRect(960, 405, 20, 145);
g.fillRect(920, 505, 100, 15);
g.fillRect(920, 515, 15, 35);
g.fillRect(1005, 515, 15, 35);
}

Ja zo, maak die een member van de klasse (met getter/setter) zodanig dat je daar vanuit paintComponent aankan. Geeft die code dat je nu hebt geen compile error? Want die weet totaal niet waar hij strKleur moet gaan halen?

Voorts kijkende naar die paintcomponent code zie je dat het zo niet zal werken. Je set de kleur op pink, maar daarna wordt het overschreven. Je zal moeten uitzoeken welk van die fillRect's (mogelijk meerdere) het kussen tekent en daarvoor zal je de kleur dan moeten setten

zoiets dus:
Code:
public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.setColor(Color.LIGHT_GRAY);
		g.fillRect(470, 200, 250, 350);
		g.setColor(Color.BLACK);
		g.fillRect(708, 250, 5, 250);
		g.fillRect(920, 370, 100, 35);
                // stel dat de volgende fillRect's voor het kussen zorgen. Geen 
                // idee of dat zo is, dit is enkel voor te illustreren.
		if(getKleurTekst().equals("roze")){
			g.setColor(Color.PINK);
		} else if(getKleurTekst().equals("rood"){
                        g.setColor(Color.RED);
                } else if else if blabla....
                } else {
                        // default kleurtje
                        g.setColor(Color.DARK_GRAY);
                }
		g.fillRect(960, 405, 20, 145);
		g.fillRect(920, 505, 100, 15);
		g.fillRect(920, 515, 15, 35);
		g.fillRect(1005, 515, 15, 35);
}

Om het nog beter te maken kan je met enum's werken en dergelijke, maar dat is waarschijnlijk wat te hoog gegrepen hiervoor.

Artheur

Legacy Member
Ik verwijs in mijn tekstvakhandler toch al dat hij de kleurnaam uit het tekstvak moet halen, door middel van .getText()?

Dus als ik dit zou gebruiken:

if (tekstKleur.equals("roze")) {
g.setColor(Color.PINK);
} else if (tekstKleur.equals("rood")) {
g.setColor(Color.RED);
} else {
// default kleurtje
g.setColor(Color.BLACK);
}
g.fillRect(920, 370, 100, 35);

dan zou normaal het kussen moeten veranderen van kleur naarmate welke kleur je ingeeft in het tekstvak?

Dan snap ik niet hoe ik het probleem moet oplossen zodat hij weet vanwaar hij die kleurnaam moet halen. :(

NeverwinterX

Legacy Member
Ah er zijn verschillende mogelijkheden:
Je slaagt het op in een member met getter/setter (getKleurTekst() bedoelde ik als zo'n setter)
Maar er nu naar kijkend zou je het ook zo kunnen doen: tekstKleur.getText().equals('bla')
En dan hoef je in actionPerformed enkel de repaint nog te zetten en niet meer dat opslaan van de tekst.

Deze twee methodes zijn trouwens ook handig waarschijnlijk bij het behandelen van die tekst:
String (Java Platform SE 6) # trim
String (Java Platform SE 6) # equalsIgnoreCase

Artheur

Legacy Member
Nu heb ik het zo gedaan, in men paintcomponent ervoor gezorgd dat strKleur weet waar hij de invoer moet halen:

String strKleur = tekstKleur.getText();

en dit als if:


if (strKleur.equals("roze")) {
g.setColor(Color.PINK);
g.fillRect(920, 370, 100, 35);
} else if (strKleur.equals("rood")) {
g.setColor(Color.RED);
g.fillRect(920, 370, 100, 35);
} else {
g.setColor(Color.BLACK);
g.fillRect(920, 370, 100, 35);
}

Dit heb ik onderaan van men paintcomponent geplaatst, zodat het niet de andere getekende objecten gaat veranderen van kleur. Als ik het zo bekijk dan zie ik toch geen enkel probleem ermee, zou normaal moeten werken. Maar dat doet het helaas niet :(

NeverwinterX

Legacy Member
De repaint() staat toch nog steeds in de ActionListener?
Je hebt de ActionListener geadd aan het tekstvak?
Je bent je ervan bewust dat de ActionListener van jtextfield enkel het invoeren van een "enter" opvangt by default (en dus niet elke ingetikte letter)? Als je elke letter wil opvangen, moet je DocumentListener gebruiken (was ik zelf niet eens van bewust, heb ik even moeten opzoeken :p)

Artheur

Legacy Member
Oooooops, ben dit topic helemaal uit het oog verloren :D Er zaten overal fouten in, eigenlijk domme fouten, die een klasgenoot van me gelukkig heeft gezien en verbeterd.

Project is helemaal afgeraakt, en toch nog nen dikke merci voor u NeverwinterX omdat je de moeite hebt genomen om me toch een beetje te helpen, ookal heb ik dit topic niet altijd in het oog gehouden ^^
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan