Archief - [PROG][JAVA] Ik kan geen functie aanroepen uit mijn class

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.

HoAxKe

Legacy Member
Ik heb een class die instaat voor het maken van de GUI. Daarin staat een JLabel die ik in een andere klasse zou moeten kunnen veranderen. Dus ik heb de JLabel private gehouden, en een public method setLabel(String text) gemaakt.

Maar nu kan ik van de classe van de gui (met een extends JFrame) deze methode niet oproepen.

Iemand een idee?

th43ns

Legacy Member
heb je een instantie gemaakt van de class waarvan je die setLabel wilt oproepen?
vb:

TestForm form = new TestForm();
form.setLabel("tekst");

edit: sorry als het een domme oplossing lijkt maar weet niet direct of je al ervaring hebt met programmeren dus :p

HoAxKe

Legacy Member
Kan ik niet gewoon TestForm.setLabel doen?
Nee zeker, dan weet hij niet welke instantie hij moet gebruiken?

WHiSPy

Legacy Member
HoAxKe zei:
Kan ik niet gewoon TestForm.setLabel doen?
Nee zeker, dan weet hij niet welke instantie hij moet gebruiken?

Enige manier dat je zoiets zou kunnen doen is door je setLabel static te maken, maar dat wil je in dit geval niet. ;)

HoAxKe

Legacy Member
Ik heb nu de aanroep van de classe met de GUI in de main een naam gegeven, die public gemaakt en dan via de main die GUI aangeroepen en zo naar die setLabel gegaan. Werkt wel volgens dat ik kan zien

eniac

Legacy Member
Post eens wat code, want uit die uitleg kan ik niet zoveel opmaken... ("een naam gegeven" = ?).

eniac

Legacy Member
Dat zal wel, maar dat wil niet meteen zeggen dat de toegepaste manier ook goed is. Vandaar dat het altijd handig is om wat input te krijgen over je code.

HoAxKe

Legacy Member
In de klasse van de public static void main heb ik een public static gemaakt van het type van mijn JFrame. Dus zoiets:

Klasse met JFrame:

class window extens JFrame{

}

Klasse met main:

class run{
public static window mainWindow;

public static void main(String[] args){
mainWindow = new window();
}
}

En dan heb ik in de klasse die de waarde in de JLabel moet zetten het volgende gedaan:

class test{
public void test(){
run.mainWindow.setLabel("de string");
}
}

Waar dan natuurlijk in de klasse window zelf een methode setLabel is die de methode setText toepast op de gepaste JLabel

eniac

Legacy Member
Mja kijk, hiervoor zei ik dus code te posten he :)

- klassenamen: altijd met hoofdletter
- members maak je private (lees wat theorie over encapsulation). Je verkrijgt toegang tot members via public getters en setters (als het tenminste wenselijk is om die members direct van buitenaf te beïnvloeden).
- de oplossing voor een probleem is niet zomaar de boel static maken en aanspreken.

Jouw code even aanpassen zodat ze voor mij beter lijkt (allez, niet zozeer dat dit volledig is wat je wil doen, maar het is wel iets properder):

class Run{
private Window mainWindow;

public Run(){
mainWindow = new Window();
}

public Window getMainWindow(){
return mainWindow;
}

public static void main(String[] args){
Run run = new Run();
}
}


Van buitenaf spreek je die dan aan door op een specifiek object de getMainWindow() aan te roepen en daarop een setLabel te doen. Of (nog beter vind ik), je maakt in het run-object een methode "setLabelText(String text)" ofzo zodat je die klasse zelf de tekst in het label laat zetten. Je moet dan wel de aanroepende klassen een referentie naar dat run-object meegeven.
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