![]() |
[Java] Txt-file uitlezen en in TextArea tonen
Ik ben nu bezig met een applicatie waarin ik tekst uit een txtfile wil lezen en tonen in een JTextArea.
Nu is dat op zich geen probleem als het allemaal binnen 1 class gebeurt, maar ik wil de TextArea in class 1 hebben staan en het txt-bestand lezen in class 2. De gelezen tekst moet dus naar de JTextArea in class 1 worden gebracht. Helaas blijft het tekstveld gewoon blanco :( De classes compilen wel en de applicatie start gewoon op. In class 1 staat mijn JTextArea (genaamd displayNickname) gedeclareerd en geinitialiseerd. Code:
public JTextArea displayNickname = new JTextArea(); Code:
displayNickname.setText(lines); Regel 2 is om te testen of displayNickname inderdaad de inhoud van lines (de string die ik uit het txt-bestand haal) krijgt. Dat is wel het geval. Maar regel 1 (die met setText dus) doet dus niet wat ik wil...Enig idee hoe ik de tekst van 'lines' toch in de JTextArea van class 1 kan krijgen? |
Laat maar, heb het al opgelost. Voor mensen met hetzelfde probleem in de toekomst:
Mogelijkheid 1 was om het allemaal in 1 class te zetten, maar dat is geen optie als je het allemaal gescheiden wilt houden. Mogelijkheid 2 was in class 2 een alternatieve textArea declareren en in de constructor als parameter meegeven, met als body een verwijzing naar zichzelf: Code:
public Class2(JTextArea altTextArea){ Code:
altTextArea.setText(blabla); Code:
class2naam = new Class2(orgineelTextArea); |
Citaat:
|
Citaat:
Maar wat ik nu dus doe is een tweede textarea formuleren in class 2, dat is toch omslachtig? Waarom kunnen classes niet gewoon rechtstreeks met elkaar data uitwisselen? |
Citaat:
class2instance.getTextArea().setText("Blaat"); |
Citaat:
En het werkt inmiddels dus ook wel, dus ik heb nu geen probleem meer. Maar ik vind het onnodig ingewikkeld omdat ik dus in class 2 een aparte verwijzing moest maken (dwz parameters doorgeven aan de constructor en blabla) ipv gewoon een eenvoudige textAreaNaam.setText(variabele); |
Ik snap niet wat er zo moeilijk aan is. Je hebt in ClassA een member variable member1. Als je die vanuit ClassB moet setten, de je toch instanceClassA.member1.setText("Blaat")?
Upload de code van die classes eens ergens want ik heb zo het vermoeden dat je jezelf hele verkeerde dingen aan 't aanleren bent. Ik heb het idee dat je niet snapt wat een objectinstantie is. Waarom ben je hier eigenlijk mee bezig? |
Citaat:
Button button1 = new Button(); maakt een instantie van het object Button, met de naam button1. Ik doe dit trouwens voor school (niet voor mijn lol iig ;)) Ik zal de (werkende) code even posten die ik nu heb (alleen de relevante stukjes; imports, lege Actionmethods, panels waarop het textveld staat en rest van de GUI heb ik bewust weggelaten): Code:
public class MainScreen extends JFrame implements ActionListener, WindowListener { Code:
public class FileDialogClass extends JFrame implements WindowListener, ActionListener { |
public FileDialogClass fDialog;
public JTextArea displayNickName = new JTextArea(); Waarom zijn deze public? Ik ben benieuwd wat er zou gebeuren als je dit zo zou laten staan en je code in zou leveren. Als je daar geen commentaar op krijgt, zou ik op zoek gaan naar een betere opleiding ;) Member variabelen horen in princiepe ALTIJD private te zijn TENZIJ ze om een of andere reden geexposed moeten worden. Ik word al zenuwachtig als ik member vars zie met default access (dus niks ervoor, geen public of private), public is in jouw geval gewoon fout. Verder is je opzet eigenlijk ook gewoon fout; JTextArea displayNickNameAlt is geen member van je filedialog class. Het idee achter OO programmeren is dat je objecten (Auto, Huis) hebt met onderdelen (Motor, Deur). Die TextArea is geen onderdeel van je fileopen dialog. De meest nette manier om dit op te lossen zou zijn als volgt: Code:
public class MainScreen extends JFrame implements ActionListener, WindowListener { Code:
ublic class FileDialogClass extends JFrame implements WindowListener, ActionListener { |
Citaat:
Bedankt trouwens voor je aanpassing. :) Idd een stuk overzichtelijker zo. Ik denk dat ik zelfs die setText-regel niet in de actionPerformed() zet, maar in een aparte method binnen MainScreen. |
Citaat:
Wel eens van de term spagetthi-code gehoord? Dit is precies wat een dergelijke warboel verzoorzaakt: code die overal bij kan, waardoor er geen enkele structuur meer in zit. De reden dat deze regels zo 'streng' zijn is dat ze je aanleren goed te programmeren. Reken maar dat als je ooit nog een grotere applicaties begint, je er alleen maar profijt van hebt het de juiste manier aangepakt te hebben. Of een methode al dan niet ergens bij kan is niet iets waar een programmeur zich zorgen over hoeft te maken. Waar je je zorgen om moet maken is dat je je code 6 maanden later nog snapt, en dat anderen die jou werk over moeten nemen later dit ook doen. Ik ben vroeger in QBasic begonnen (niet tijdens m'n opleiding, gewoon voor de knutsel :)), en ik heb ooit een keer een spelletje gemaakt, en nu ik die code teruglees snap ik er echt geen zak meer van. Met dergelijke code was je hier niet je proeftijd doorgekomen nl. ;) Citaat:
|
Citaat:
Spaghetti-code is wel een voor zichzelfsprekende term ja. Maar goed, mijn code is nog wel begrijpelijk, al zeg ik het zelf. En in mijn opleiding (Mediatechnologie) is (Java)programmeren slechts een onderdeel, niet de hoofdmoot. De opleiding probeert van alles wat (techniek, vormgeving, bedrijfskunde) mee te pikken, en erg diep wordt er niet op ingegaan. Maarja, toch ontkom ik er niet aan... |
Alle tijden zijn GMT +1. Het is nu 12:38. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.