Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Dynaaminen gui javassa

Sivun loppuun

Short Php [17.07.2010 14:07:00]

#

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ä?

tsuriga [17.07.2010 18:43:39]

#

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.

groovyb [17.07.2010 22:08:51]

#

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/21163-painikkeet-aukaisee-ja-sulkee vb puolella olikin juttua nappien käpistelystä toisen luokan kautta, vähän sama asia tässä)

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.

Short Php [17.07.2010 22:11:55]

#

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.

hk [18.07.2010 08:34:39]

#

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").

Metabolix [18.07.2010 10:40:00]

#

Eikö teksti vain muutu, vai tuleeko koodista jokin käännösvirhe tai ajonaikainen poikkeus?

Short Php [18.07.2010 12:03:23]

#

Teksti ei vain muutu

groovyb [18.07.2010 16:25:53]

#

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 ;)

Short Php [19.07.2010 12:44:25]

#

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().

groovyb [19.07.2010 16:20:40]

#

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.

Metabolix [19.07.2010 16:43:03]

#

Groovyb, katsopa nyt uudestaan. Kyseessä on Java, ei mikään Microsoftin tuotos.

groovyb [19.07.2010 22:19:24]

#

kappas sori, miksiköhän katsoin että j++ olis käytössä? ;)

Short Php [19.07.2010 23:43:49]

#

public void main() {
	        java.awt.EventQueue.invokeLater(new Runnable() {
	            public void run() {
	                new ModGui().setVisible(true);

	            }
	        });
	    }

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta