Eli minulla on kaksi classia, toinen gui ja toinen kaikki muu. Pitäisi sieltä kaikesta muusta saada muutettua labelin teksti ja saada lisättyä listaan uusi elementti. gui.label1.setText("njoo") ei muuta mitään joten toimiiko tuo vain sen gui classin sisällä?
Otsikon ja listan pitäis olla luokan julkisia (ja staattisia, jos gui-luokasta ei luoda ikinä oliota) jäseniä. Julkisia muuttujia yleensä karsastetaan, mutta en osaa sanoa, tulisiko tässä suositella erillisten muutosmetodien tekemistä gui-luokkaan. Tutustu joihinkin Java-softien GUI-koodeihin, Javan näkyvyysalueisiin ja koodikonventioihin.
saat tehtyä jos muutat oletuksena private objektiksi luodun (jos drag´n dropilla loit textboksin) public:si. Jos siis kutsut Gui luokkaasi toisesta, ja siellä textbox on julkinen, voit muuttaa arvoa ja luoda eventit käytettäväksi toisesta luokastasi. ( https://www.ohjelmointiputka.net/keskustelu/
toinen tapa jolla ei tarvitse käyttää julkisia objekteja, on luoda julkinen metodi gui luokkaasi joka tekstin asettaa.
eli vaikka xxxxx.Aseta(int objekti_id, string teksti), jos haluat käyttää samaa metodia mihin vaan objektiin. (tätä pystyy ainakin helposti soveltamaan jos for eachillä käy läpi formin objektit ja asettaa halutun objektin text:iin tekstin)
tai tekee erilliset metodit jokaiselle objektille joita toisesta luokastasi muokataan. xxxxx.AsetaTextBox1(string teksti) tyyppisesti.
groovyb kirjoitti:
saat tehtyä jos muutat oletuksena private objektiksi luodun (jos drag´n dropilla loit textboksin) public:si. Jos siis kutsut Gui luokkaasi toisesta, ja siellä textbox on julkinen, voit muuttaa arvoa ja luoda eventit käytettäväksi toisesta luokastasi. toinen tapa jolla ei tarvitse käyttää julkisia objekteja, on luoda julkinen metodi gui luokkaasi joka tekstin asettaa.
eli vaikka xxxxx.Aseta(int objekti_id, string teksti), jos haluat käyttää samaa metodia mihin vaan objektiin. (tätä pystyy ainakin helposti soveltamaan jos for eachillä käy läpi formin objektit ja asettaa halutun objektin text:iin tekstin)
tai tekee erilliset metodit jokaiselle objektille joita toisesta luokastasi muokataan. AsetaTextBox1(string teksti) tyyppisesti.
Juuri tätä kokeilin muttei toiminut. (metodi oli kyllä toimiva sillä suoraan guissa oleva buttonin event joka suoritti metodin toimi) metodi kyllä suoritettiin (system.writein tjsp. tulosti tekstin) mutta listaan ei vain ilmestynyt mitään. Tämä ei ollut kylläkään pakollinen juttu, vain hyvä lisä, joten vaikka tähän olisi kiva saada vastaus, se ei ole enää mitenkään kiireellinen tai muuten tärkeä juttu.
Jos sinulla on muuttujassa gui viite vaikka JFrame-olioon ja siellä oliossa julkinen kenttä nimeltä label1, joka viittaa siihen JFrameen liitettyyn JLabel-olioon, niin sen teksti muuttuu juurikin käskyllä gui.label1.setText("njoo").
Eikö teksti vain muutu, vai tuleeko koodista jokin käännösvirhe tai ajonaikainen poikkeus?
Teksti ei vain muutu
onko mahdollista että olet luonut kaksi gui oliota?
näyttää pahasti siltä että se gui mikä näkyy ruudulla, ei ole se minkä arvoja käytät toisesta luokastasi.
jos sinulla on normi windows application missä ensimmäinen "form1" tulee ruudulle automaattisesti, ja olet luonut toisessa luokassasi Form1 olion (Form1 uusiformi = new etc.), et voi uuttaformiasi käyttää. tai voit, mutta ruudulla ei mitään tapahdu.ei myöskään tekstit vaihdu ruudulla.
jos haluat käyttää sitä yhtä autogeneroitua formia toisesta luokasta, laita se samaan namespaceen jotta näkevät toisensa ja voit public muuttujia käyttää. näin ei myöskään tarvitse luoda erillistä oliota gui luokastasi, vaan voi sitä autogeneroitua käyttää.
en tiedä ymmärtääkö kukaan nyt mitä tarkoitan mutta selvennän tarvittaessa ;)
private ModGui gui;
tuo on koodin alussa
gui = new ModGui(); gui.main();
tuo suoritetaan koodin alkaessa
gui.muutavalue("joo");
tuolla niitä olen sitten yrittänyt muokata. Tuo muutavalue kyllä toimii.
Tuli mieleen, pitäisikö käyttää
private ModGui gui = new ModGui();
mielummin kuin tuon määritystä koodin alussa, ja koodin alussa pelkästään suorittaa tuo main().
millainen gui on kyseessä kun käytät main funktiota?
perustuuko gui windows.forms luokkaan vai teetkö jollain erillisellä kirjastolla?
tuo main() funktio viittaisi johonkin muuhun kuin .netin luokkiin.
Groovyb, katsopa nyt uudestaan. Kyseessä on Java, ei mikään Microsoftin tuotos.
kappas sori, miksiköhän katsoin että j++ olis käytössä? ;)
public void main() { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new ModGui().setVisible(true); } }); }
Aihe on jo aika vanha, joten et voi enää vastata siihen.