Gå til innhold

Hente data fra felter når jeg trykker på lagre


Anbefalte innlegg

Hei

 

Jeg er ganske fersk i Java, så ikke slakt meg om spørsmålet er dumt. Har lett en stund nå, men finner det ikke helt ut.

 

Jeg har noen JTextFields og noen JComboBox som jeg vil hente data fra når jeg trykker på en lagre knapp. Får ikke helt dette til. Noen som kan forklare det greit?

 

Har en bok, men de har delt det opp så voldsomt mange forskjellige klasser at jeg mister helt oversikten. :dontgetit:

Lenke til kommentar
Videoannonse
Annonse

Ja, har kikket litt på de. Mulig de kan brukes, og at jeg bare har brukt de feil.

 

Jeg har en rekke tomme felter som bruker skal fylle inn, for så å trykke på lagre og disse skal skrives til fil(neste problem ;) ).

 

Når vinduet åpnes er feltene tomme. Og det var disse tomme feltene jeg fikk hentet ut.

 

Altså informasjonen skal hentes ut etter at det er blitt trykket på lagre.

Endret av kjakangund
Lenke til kommentar

Kan jo alltids legge ut koden min, hvis det er til noen hjelp. Er ikke så vakker lenger etter litt prøving og feiling.

 

package gt4;
import java.awt.Color;
import java.awt.Container;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
/*
* Created on 28.feb.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/

/**
* @author Kjakan Gundersen
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class leggeTilRundetid extends JFrame{
public static final int NUMMER = 0, BILMERKE = 1, BILMODELL = 2, BANE = 3, MODIFISERT = 4, RUNDETID = 5;
String bilmerke = "test2", bilmodell = "test", bane = "", rundetid = "", modifisert = "";

private JButton lagre;

public leggeTilRundetid()
{
                this.setSize(800,300);
                this.setLocation(250,250);
                this.setTitle("Legge til runde");
 	
                Container container = this.getContentPane();
 
                Label bilMerkeLbl = new Label("Bilmerke:");
                bilMerkeLbl.setLocation(50,40);
                bilMerkeLbl.setSize(100,20);
                bilMerkeLbl.setBackground(Color.white);
                container.add(bilMerkeLbl);
 
                String[] bilMerker = {"Acura","BMW","Ford"};
 
                JComboBox bilmerkeCb = new JComboBox(bilMerker);
                bilmerkeCb.setLocation(50,60);
                bilmerkeCb.setSize(150,20);
                container.add(bilmerkeCb);
 
                Label bilModellLbl = new Label("Modell:");
                bilModellLbl.setLocation(200,40);
                bilModellLbl.setSize(100,20);
                bilModellLbl.setBackground(Color.white);
                container.add(bilModellLbl);
 
 -->          //JTextField som data skal hentes fra
   *           JTextField bilModellTf = new JTextField();
   *           bilModellTf.setSize(150,20);
   *           bilModellTf.setLocation(200,60);
   *           bilmodell = bilModellTf.getText();
                container.add(bilModellTf);
 
                Label baneLbl = new Label("Bane:");
                baneLbl.setSize(100,20);
                baneLbl.setLocation(350,40);
                baneLbl.setBackground(Color.white);
                container.add(baneLbl);
 
 
                //Combobox baner
                String[] baner = {"Nurburing", "Grand Canyon", "Motorland"};
 
                JComboBox baneCb = new JComboBox(baner);
                baneCb.setLocation(350,60);
                baneCb.setSize(150,20);
                container.add(baneCb);
 
                //Felt tid skal skrives i
                Label rundetidLb = new Label("Rundetid");
                rundetidLb.setLocation(500,40);
                rundetidLb.setSize(100,20);
                rundetidLb.setBackground(Color.white);
                container.add(rundetidLb);
 
                JTextField rundetidTfld = new JTextField();
                rundetidTfld.setLocation(500,60);
                rundetidTfld.setSize(150,20);
                container.add(rundetidTfld);
 
                ButtonGroup gruppe = new ButtonGroup();
                JRadioButton trimmet = new JRadioButton("Trimmet");
                trimmet.setLocation(650,50);
                trimmet.setSize(100,20);
                trimmet.setBackground(Color.white);
                gruppe.add(trimmet);
                container.add(trimmet);
 
                JRadioButton standard = new JRadioButton("Standard");
                standard.setLocation(650,70);
                standard.setSize(100,20);
                standard.setBackground(Color.white);
                gruppe.add(standard);
                container.add(standard);
 
                //Lagre knapp
                JButton lagre = new JButton("Lagre");
                lagre.setSize(100,40);
                lagre.setLocation(600,130);
                lagre.addActionListener(
                new ActionListener()
                {
                       public void actionPerformed(ActionEvent actionEvent)
                       {
                                    bilmodell = bilModellTf.getText();

                                    skriveTilFil();
                 }});
                 container.add(lagre);
 
                 JPanel panel = new JPanel();
                 panel.setBackground(Color.white);
                 container.add(panel);
 
                 this.setVisible(true);
          }


public void skriveTilFil()
{
                  String output;
 
                  File filnavn = new File("c:\\gt4data\\gt4data.dat");
 
                  //Hjelp til meg selv
                  System.out.println("lagre");
                  System.out.println(bilmodell);
                  System.out.println(bilmerke);
                  return;
 
  }

}

 

Trenger egentlig bare å bry deg om linja med *

 

Skal ha med informasjonen jeg får der til skriveTilFil på en eller annen måte.

 

******************************************************

 

Ok enig der, var bare en test. Mener du den skal legges til under ActionListener på knappen, eller kan den ligge under skriveTilFil();

 

**************************2****************************

Når jeg legger det til slik jeg har gjort nå, så får jeg beskjed om dette:

 

Cannot refer to a non-final variable bilModellTf inside an inner class defined in a different method

Endret av kjakangund
Lenke til kommentar

Du henter inn informasjonen alt for tidlig.

Ikke kall .getText() før noen trykker på knappen. Slik det er nå så kalles .getText() i det vinduet blir laget, og da har jo ingen fått tid til å skrive inn en verdi.

 

Så legg inn i skriveTilFil() metoden at den skal hente inn teksten før den skriver til fil.

 

Ergo, deklarer tekstboksene utenfor metoden (slik at de blir klassevariabler) og kall <variabelnavn>.getText() når brukeren har fått tid til å skrive inn en verdi....

 

 

****************************'

Tror vi bør bruke nye innlegg, så det blir mer oversiktlig...

 

Jeg ville nok hentet dem inn i skrivTilFil(), men du kan gjøre det under actionPerformed()... Du kan evt. endre skrivTilFIl() til å ta imot verdiene som du henter inn under actionPerformed()...

Endret av Mr.Garibaldi
Lenke til kommentar

Vær så snill, lage nye poster. Blir vanskelig å følge med mange redigeringer.

 

public class leggeTilRundetid extends JFrame{
public static final int NUMMER = 0, BILMERKE = 1, BILMODELL = 2, BANE = 3, MODIFISERT = 4, RUNDETID = 5;
String bilmerke = "bmw", bilmodell = "test", bane = "", rundetid = "", modifisert = "";
** JTextField bilModellTf = new JTextField();
private JButton lagre;

public static void main(String[] args){
   Object test = new leggeTilRundetid();
}

public leggeTilRundetid()
{


//Lagre knapp
JButton lagre = new JButton("Lagre");
lagre.setSize(100,40);
lagre.setLocation(600,130);
lagre.addActionListener(
  new ActionListener()
  {
   public void actionPerformed(ActionEvent actionEvent)
   {
        bilmodell = bilModellTf.getText();
    skriveTilFil();
  }});
container.add(lagre);

}

public void skriveTilFil()
{
String output;
bilmodell = bilModellTf.getText();
File filnavn = new File("c:\\gt4data\\gt4data.dat");

//Hjelp til meg selv
System.out.println("lagre");
System.out.println(bilmodell);
System.out.println(bilmerke);
return;

}

}

 

Hvis du gjør det på denne måten (**) så kan du legge .getText() begge steder...

 

[EDIT]

Evt. kan du nøye deg med JTextField bilModellTf; og beholde = new JTextField() som du har den allerede.

Men du må deklarer den som klassevariabel..

[/EDIT]

Endret av Mr.Garibaldi
Lenke til kommentar

Hmm. La den til i skriveTilFil som du viste. Får ingen kompileringsfeil, men jeg får aldri skrevet ut system.out... i slutten av skriveTilFil

 

Edit:

Greier du å kjøre snutten din og få ut alle system.out.. linjene?

 

Takker for hjelpen, men nå må du ikke slite deg ut på galskapen min. ;)

Endret av kjakangund
Lenke til kommentar
Hmm. La den til i skriveTilFil som du viste. Får ingen kompileringsfeil, men jeg får aldri skrevet ut system.out... i slutten av skriveTilFil

 

Edit:

Greier du å kjøre snutten din og få ut alle system.out.. linjene?

 

Takker for hjelpen, men nå må du ikke slite deg ut på galskapen min. ;)

Ja, den kjører som den skal hos meg...

 

[EDIT] Den stemmer ikke hos meg forresten. Testet bare med BMW, men jeg får BMW på alle andre typer... Får ta en nærmere titt på det...

[/EDIT]

lagre
Z3
bmw

 

Bare hyggelig, synes det er morsomt å sysle med java :)

 

(Pluss det at jeg trenger å friske opp swing/awt kunnskapene mine ;))

Endret av Mr.Garibaldi
Lenke til kommentar

OK. Nå er jeg skikkelig forvirra. Kan du poste eller sende meg hele koden som du har fått til å virke. Fatter ikke hva som skjer. Får jo ingen kompileringsfeil.

 

Edit:

 

Hehe. neida. Har java på skolen men lager programmet mest for gøy. Vi har vel egentlig ikke kommet så langt enda. Tenkte jeg ville prøve å lage et program for å lagre rundetider i Gran Turismo 4. Gjør det kun for å lære.

Endret av kjakangund
Lenke til kommentar
OK. Nå er jeg skikkelig forvirra. Kan du poste eller sende meg hele koden som du har fått til å virke. Fatter ikke hva som skjer. Får jo ingen kompileringsfeil.

Har ikke gjort mye med den, men er ikke konsekvent med hvor jeg henter verdier.

 

Det viktigste er egentlig klassevariablene som jeg har markert med *

 

import java.awt.Color;
import java.awt.Container;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
/*
* Created on 28.feb.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/

/**
* @author Kjakan Gundersen
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class leggeTilRundetid extends JFrame{
public static final int NUMMER = 0, BILMERKE = 1, BILMODELL = 2, BANE = 3, MODIFISERT = 4, RUNDETID = 5;
String bilmerke = "bmw", bilmodell = "test", bane = "", rundetid = "", modifisert = "";

*JTextField bilModellTf = new JTextField();
*JComboBox bilmerkeCb;
*JComboBox baneCb;
*JTextField rundetidTfld;

private JButton lagre;

public static void main(String[] args){
   Object test = new leggeTilRundetid();
}

public leggeTilRundetid()
{
this.setSize(800,300);
this.setLocation(250,250);
this.setTitle("Legge til runde");

Container container = this.getContentPane();

Label bilMerkeLbl = new Label("Bilmerke:");
bilMerkeLbl.setLocation(50,40);
bilMerkeLbl.setSize(100,20);
bilMerkeLbl.setBackground(Color.white);
container.add(bilMerkeLbl);

String[] bilMerker = {"Acura","BMW","Ford"};

bilmerkeCb = new JComboBox(bilMerker);
bilmerkeCb.setLocation(50,60);
bilmerkeCb.setSize(150,20);
container.add(bilmerkeCb);

Label bilModellLbl = new Label("Modell:");
bilModellLbl.setLocation(200,40);
bilModellLbl.setSize(100,20);
bilModellLbl.setBackground(Color.white);
container.add(bilModellLbl);


bilModellTf.setSize(150,20);
bilModellTf.setLocation(200,60);
bilmodell = bilModellTf.getText();
container.add(bilModellTf);

Label baneLbl = new Label("Bane:");
baneLbl.setSize(100,20);
baneLbl.setLocation(350,40);
baneLbl.setBackground(Color.white);
container.add(baneLbl);


//Combobox baner
String[] baner = {"Nurburing", "Grand Canyon", "Motorland"};

baneCb = new JComboBox(baner);
baneCb.setLocation(350,60);
baneCb.setSize(150,20);
container.add(baneCb);

//Felt tid skal skrives i
Label rundetidLb = new Label("Rundetid");
rundetidLb.setLocation(500,40);
rundetidLb.setSize(100,20);
rundetidLb.setBackground(Color.white);
container.add(rundetidLb);

rundetidTfld = new JTextField();
rundetidTfld.setLocation(500,60);
rundetidTfld.setSize(150,20);
container.add(rundetidTfld);

ButtonGroup gruppe = new ButtonGroup();
JRadioButton trimmet = new JRadioButton("Trimmet");
trimmet.setLocation(650,50);
trimmet.setSize(100,20);
trimmet.setBackground(Color.white);
gruppe.add(trimmet);
container.add(trimmet);

JRadioButton standard = new JRadioButton("Standard");
standard.setLocation(650,70);
standard.setSize(100,20);
standard.setBackground(Color.white);
gruppe.add(standard);
container.add(standard);

//Lagre knapp
JButton lagre = new JButton("Lagre");
lagre.setSize(100,40);
lagre.setLocation(600,130);
lagre.addActionListener(
  new ActionListener()
  {
   public void actionPerformed(ActionEvent actionEvent)
   {
        bilmodell = bilModellTf.getText();
    skriveTilFil();
  }});
container.add(lagre);

JPanel panel = new JPanel();
panel.setBackground(Color.white);
container.add(panel);
    

this.setVisible(true);
}

public void skriveTilFil()
{
String output;

File filnavn = new File("c:\\gt4data\\gt4data.dat");

//Hjelp til meg selv
System.out.println("lagre");
System.out.println(bilmodell);
System.out.println(bilmerkeCb.getSelectedItem());
return;

}

}

Lenke til kommentar

Takker så mye for hjelpen. Får studere og lære. Får holde litt øye med java delen av dette forumet tror jeg. Mulig dere ser meg igjen, når jeg skal prøve meg på fil lagring. Hehe. Takker for hjelpen igjen:)

 

Hehe. neida. Har java på skolen men lager programmet mest for gøy. Vi har vel egentlig ikke kommet så langt enda. Tenkte jeg ville prøve å lage et program for å lagre rundetider i Gran Turismo 4. Gjør det kun for å lære.

Lenke til kommentar
Takker så mye for hjelpen. Får studere og lære. Får holde litt øye med java delen av dette forumet tror jeg. Mulig dere ser meg igjen, når jeg skal prøve meg på fil lagring. Hehe. Takker for hjelpen igjen:)

 

Hehe. neida. Har java på skolen men lager programmet mest for gøy. Vi har vel egentlig ikke kommet så langt enda. Tenkte jeg ville prøve å lage et program for å lagre rundetider i Gran Turismo 4. Gjør det kun for å lære.

Hehe, da så. Lykke til.

 

Håper du fikk det til, og lykke til videre med filbehandlingen.

Vil anbefale deg å lese tutorialene på java.sun.com. Der vil du bl.a. finne hvordan du skal ordne tekstboksene, radioknapper etc., og filbehandling...

Lenke til kommentar
Du må lagre alle objektene som klassevariabler, og så hente inn verdien på nytt når du lagrer.

Bare for å pirke litt, så er det nok instansvariabler du mener her. Klassevariabler er de som er deklarert som 'static', altså hører de til selve klassen og ikke et bestemt objekt.

 

Syntes bare jeg måtte gjøre deg oppmerksom på det, ellers veldig bra, mr. Garibaldi :thumbup:

Endret av Frank2004
Lenke til kommentar
Du må lagre alle objektene som klassevariabler, og så hente inn verdien på nytt når du lagrer.

Bare for å pirke litt, så er det nok instansvariabler du mener her. Klassevariabler er de som er deklarert som 'static', altså hører de til selve klassen og ikke et bestemt objekt.

 

Syntes bare jeg måtte gjøre deg oppmerksom på det, ellers veldig bra, mr. Garibaldi :thumbup:

Hehe, veldig sant. Liten brainfart fra min side der.

 

Takk for korreksen, og rosen :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...