Avatar billede freddy04 Nybegynder
20. september 2005 - 14:40 Der er 25 kommentarer og
1 løsning

Flytte parametre mellem vinduer

Hejsa,
Jeg forsøger at lave et program som primært består af én frame kaldet hovedVindue. Men herfra prøver jeg så at lave det så man kan trykke på en knap og få et andet vindue (dialogboks) frem til at indtaste noget i 4 tekstelter. Det virker også fint men - hvordan får jeg så det indtastede med tilbage til den klasse der kaldte dialogklassen? Dialogvinduet er jo et objekt af dialogklassen og kan vel derfor ikke sådan returnere noget? Jeg har også en "Send" knap i dialogvinduet som jo gerne skulle aktivere det hele.

Det er svært at forklare, altså jeg har:

1. klassen hovedVindue extends JFrame
2. klassen dialogVindue extends JDialog

klassen hovedVindue kalder så:
popVindue = new dialogVindue(hovedVindue.this); popVindue.setVisible(true);

I popVindue er der så nogle tekstfelter, hvordan får jeg det input tilbage til hovedVindue ?
Avatar billede trp79 Nybegynder
20. september 2005 - 14:58 #1
Du kan sende den klasse du kommer fra med til dialogboksen:
popVindue = new dialogVindue(hovedVindue.this, this);

og i konstruktøren i dialogVindue skal du så modtage "this-objektet" som jo er dit hovedVindue:
public dialogvindue (..., Hovedvindue hv)

I Hovedvindueklassen kan du så behandle indtastninger, fx med en metode.
Dvs. du i HovedVindue.java fx har en metode public void behandelDialogInput(String a) og den kan du jo så nu kalde gennem dialogVindue da du har modtaget en reference til hovedvindue objektet i konstruktøren.
Avatar billede mikkelbm Nybegynder
20. september 2005 - 15:00 #2
2 muligheder:

1. Lav en public metode i dit hovedVindue og send den med som parameter.
2. Lav en public get metode på dit dialogvindue, hvor du kan hente de indtastede informationer.
Avatar billede freddy04 Nybegynder
20. september 2005 - 15:05 #3
ok tak, nu skal jeg bare vælge den letteste løsning :-)

mikkelbm - hvordan vil sådan en public get metode se ud? er det noget jeg gør lige efter jeg har oprettet dialogvinduet ?
Avatar billede freddy04 Nybegynder
20. september 2005 - 15:12 #4
Det skal jo først ske når der trykkes på ok i popVindue.
trp79 - hvis jeg sender hovedVindue med som parameter, hvordan lukket jeg så popVindue når der er trykket ok? kan vel ikke bruge exit?
Avatar billede trp79 Nybegynder
20. september 2005 - 15:18 #5
mener du skal skrive this.dispose() - derved skulle vinduet gerne lukkes.
Når brugeren har indtastet noget og trykker ok skal der vel så tjekkes på om brugeren har indtastet noget - har brugeren det, så kan er det bare at kalde hv.behandelDialogInput(textfelt.getText()).

Håber det kan bruges
Avatar billede freddy04 Nybegynder
20. september 2005 - 15:44 #6
Det virker fint med overførslen, men kan ikke lukke popVindue igen når der er trykket ok :-)
Kan selvfølgelig godt bruge krydset øverst men er jo ikke så kønt og det indtastede i vinduet er der så stadig næste gang man klikker det frem :-)
Avatar billede mikkelbm Nybegynder
20. september 2005 - 15:45 #7
I dit hovedVindue:

public void setSomething (String str1, String str2)
{
  // Brug informationer i hovedvindue...
}

Constructor på din dialogVindue:

...
private hovedVindue main;

public dialogVindue (hovedVindue main)
{
  this.main = main;
}

Og i din actionperformed på knappen i dialogVindue:

lukknap.addActionPerformed (ActionEvent e)
{
  save ();
}


...


private void save ()
{
  String str1 = et_eller_andet.getText();
  String str2 = et_eller_andet.getText();
  main.setSomething  (str1, str2);
  this.dispose ();
}


Nu er jeg ikke lige i nærheden af en Java compiler, så jeg kan ikke lave et fuldstændigt eksempel, så derfor er det lidt pseudo agtigt :)
Avatar billede freddy04 Nybegynder
20. september 2005 - 15:46 #8
nå ok, nu har jeg fundet ud af at lukke det med dispose, men næste gan man klikker det frem er de sidste indtastede info der så stadig.
Avatar billede freddy04 Nybegynder
20. september 2005 - 15:48 #9
Jeg kan jo så bare i popVindue starte med at sætte alle textfelter til "", men er det den eneste måde?
Avatar billede freddy04 Nybegynder
20. september 2005 - 15:51 #10
mikkelbm - tak jeg forstår ideen bag alligevel :-)
Avatar billede mikkelbm Nybegynder
20. september 2005 - 15:51 #11
Du kan også oprette en ny instans af dit popupVindue hver gang. Så nulstilles de jo automatisk :)
Avatar billede freddy04 Nybegynder
20. september 2005 - 16:14 #12
troede jo egentlig det var det der skete her:
popVindue = new dialogVindue(hovedVindue.this); ?
Avatar billede mikkelbm Nybegynder
20. september 2005 - 16:30 #13
Jah... Det har du da ret i. Så kan dine felter i dialogVindue heller ikke være udfyldte, medmindre du har hardcoded noget ind.

Må jeg prøve at se koden til din dialogVindue ?
Avatar billede freddy04 Nybegynder
20. september 2005 - 16:35 #14
Jeg har også lagt mærke til at popVindue står samme sted på skærmen næste gang det åbnes - som om det aldrig har været lukket, men kun minimeret.

kan det være denne linie i konstruktøren i popVindue ?

super(owner, "Udfyld felterne",true);

Ellers er det vel noget med visble true ?
Avatar billede mikkelbm Nybegynder
20. september 2005 - 16:38 #15
Nej. Det eneste sted det kan være er i din hovedVindue - hvor du på en eller anden måde kommer til at genbruge din instans af dialogVindue.

Men det er svært at sige uden mere kode.
Avatar billede freddy04 Nybegynder
20. september 2005 - 16:45 #16
ahh ok! Jeg havde denne linie i hovedvindue før dialogen blev oprettet:
if (popVindue==null)

troede den sikrede mig at man kun kunne have et popVindue ad gangen
Avatar billede freddy04 Nybegynder
20. september 2005 - 16:46 #17
smid nogle svar :-)
Avatar billede mikkelbm Nybegynder
20. september 2005 - 16:46 #18
Kommer her :)
Avatar billede trp79 Nybegynder
20. september 2005 - 16:51 #19
Giv du bare mikkelbm pointene - det er ham der har gjort det største arbejde.
Avatar billede freddy04 Nybegynder
20. september 2005 - 16:52 #20
Når I nu er så godt i gang, kan i så ikke svare på mit andet spørgsmål længere nede også ? Det jeg vel egentlig bare vil vide er: kan en string indeholde formateret tekst? Altså hvis jeg skriver noget tekst og fx gør det til fed skrift, kan jeg så gemme den string i en fil og hente den frem senere, og så vil formateringen stadig være der ?
Avatar billede freddy04 Nybegynder
20. september 2005 - 16:52 #21
ok
Avatar billede mikkelbm Nybegynder
20. september 2005 - 16:55 #22
Det er ikke noget jeg har beskæftiget mig med, så jeg kan desværre ikke være behjælpelig.
Avatar billede trp79 Nybegynder
20. september 2005 - 17:29 #23
Jo hvis du arbejder med et JTextPane, så kan man gemme det formaterede indhold i en fil - så vidt jeg husker - jeg oprettede en gang selv et tilsvarende spørgsmål. Jeg prøver lige at finde en reference til det...
Avatar billede trp79 Nybegynder
20. september 2005 - 17:33 #24
Prøv at kigge her: 11/04-2003 23:55:18 i spg. http://www.eksperten.dk/spm/339622
Avatar billede trp79 Nybegynder
20. september 2005 - 17:34 #25
(jeg har ikke selv brugt det, men der er et forslag)
Avatar billede freddy04 Nybegynder
21. september 2005 - 09:05 #26
tror faktisk jeg har fået det til at virke...
Smid et svar i det andet spørgsmål så jeg kan lukke den - og tak for hjælpen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester