Tekstikenttä ongelma

Aulis

Teen JTextFieldillä taulukko-olion, jossa 5 alkiota. Asetan ne JPaneliin jokaisen erikseen while-silmukassa ja niille kuuntelijan. Kun ohjelman ajaa niin jokaisessa tekstikentässä on oma tekstinsä. Miten saisin tehtyä niin, että kun tietyn tekstikentän kohdalla painaa ENTERiä niin se tulostaa siinä juuri tietyssä kentässä olevan tekstin konsoliin. Yritin seuraavaa kooodia, mutta ei toimi.

// koodi alkaa

JTextField[] txt3;

txt3 = new JTextField[4];
         
for (int j = 0; j < txt3.length; j ){
               
txt3[j] = new JTextField();
}

while(rs.next()){
               
panel3 = new JPanel();
            txt3[i].setText(rs.getString(5));
         txt3[i].addActionListener(this);         txt3[i].setForeground(Color.black);
         
panel3.add(txt3[i]);
         f2.getContentPane().add(panel3, BorderLayout.SOUTH);
i ;
}

// ja seuraavaksi actionPerformed metodi

public void actionPerformed(ActionEvent evt) {
      
String text = txt3[i].getText();
System.out.println(text);      
      
}

// Koodi loppuu

Huom. jos tuohon actionPerformed metodiin laittaa pelkästään, että System.out.println("Testi");
niin se tulostaa, että Testi kun painetaan missä tahansa kentässä ENTER. Miten siis hakea siitä nimenomaisesta kentästä teksti ja tulosteta sitä consoliin kun ENTER on painettu?

3

296

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • juu

      Swing:istä enempiä ymmärtämätön kysyy: Mikä on muuttujan i merkitys?

    • Piru

      txt3 = new JTextField[4];

      luo taulukon jossa on 4 alkiota, eikä 5. Alkiot nollasta kolmeen.

      Toi i-muuttuja mua hiukan hämää. Sitä ei alusteta whilen sisällä, joten se saattaa olla luokan muuttujia. Se tarkoittais sitä, että kun paneeli on luotu ja pääset vihdoin enteriä painelemaan, niin i on silloin aina maksimiarvossaan eli kuinka monta kertaa rs.next() on onnistunnut.

      JTextFieldejä paneelille vietäessä homma vielä toimii. ActionPerformed saa aina sen maksimi i:n arvon.

      Suosittelen että otat ihan uuden lähestymistavan tähän ongelmaan. Älä käytä tota i:tä kertomaan, että mikähän JTextFieldin teksti pitää nyt tulostaa.

      ActionEvent evt ei tule turhan takia sinne actionPerformed()-metodiin. Jokaisella JTextFieldillä on oma tunnuksensa ja sen saa kaivettua tuolta eventistä. Sen perusteella tiedät, että minkä kentät sisällä sitä enteriä painettiin.

      tässä on koko roska:
      ******************************************
      import java.awt.BorderLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.util.ArrayList;

      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax.swing.JTextField;

      public class ActionTesti implements ActionListener{

         
         public ActionTesti() {
            super();
         }

         public static void main(String[] args) {
            
            JFrame ikkuna = new JFrame("Testi");
            ikkuna.setSize(200,200);
            ikkuna.setVisible(true);
            
            JTextField kentta = new JTextField();
            kentta.setSize(80,20);
            kentta.addActionListener(new ActionTesti());
            kentta.setName("Eka");
            
            JPanel paneeli = new JPanel();
            paneeli.setSize(200,200);
            
            paneeli.setVisible(true);
            paneeli.add(kentta);
            
            ikkuna.getContentPane().add(paneeli, BorderLayout.SOUTH);
            
            
         }
         
      public void actionPerformed(ActionEvent evt) {

      JTextField kohde = (JTextField)evt.getSource();

      System.out.println(kohde.getText());

      }
      }
      **************************************'

      • Aulis

        Thanks! :)
        Sain ton toimimaan.

        Pitäis vielä semmonen juttu saada lisätä, että kun on esim. 5 TextFieldiä ja niiden vieressä 5 JLabelia niin, että niiden JLabelien tekstin saisi myös tulostettua siltä tietyltä riviltä, missä TextField-kentässä on painettu enteriä.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. en vaan saa häntä pois

      Mielestäni pyörimästä. Onko kellekään toiselle käynyt näin? Ihastuin pakkomielteisesti noin vuosi sitten erääseen naiseen. Ei vaan katoa mielestä va
      Ikävä
      176
      2005
    2. Suomi24 kysely: ihmisten kuplautumista ei pääosin koeta vakavaksi ongelmaksi

      “Kuplautumista on mahdotonta estää. Ihmiset ovat aina viihtyneet samankaltaiset arvot ja maailmankatsomuksen jakavassa seurassa ja muodostaneet sen pe
      Suomi24 Blogi ★
      36
      1706
    3. Ohhoh! Glamourmalli Elena, 29, teetti tiimalasivartalon - Vei rahaa ja tuotti tuskaa - Katso kuvat!

      Transtaustainen glamourmalli Elena Vikström on käynyt vuosien ajan plastiikkakirurgisissa toimenpiteissä. Tästä näet lopputuloksen: https://www.suomi
      Kotimaiset julkkisjuorut
      8
      1345
    4. Ostiko Martina uuden ponin tyttärelleen, vai oliko myös Stefan itsekkin valitsemassa ponia .?

      Kiva kun on tyttärelle mielekäs harrastus annettu, ehkä vielä on tulevaisuudessa hänelle tärkeä ja valitsee sen perusteella tulevan ammatin.
      Kotimaiset julkkisjuorut
      224
      1164
    5. Sinä olet tärkeä

      Herätät minussa kunnioitusta. Kiehdot minua. En oikein saa kiinni sinusta. Ehkä juuri siksi. Aistin että sinäkin pidät minusta. Vetovoima on ollut alu
      Ihastuminen
      59
      1161
    6. Varisjärvellä mersu.

      Varisjärven tiellä tuli vanhamersu kylkiedellä mutkassa vastaan ja vähällä keulaan mutta tökkäs penkkaan, hyppäsin omasta autosta ulos ja kävin kiskas
      Suomussalmi
      15
      1020
    7. Mitähän ajattelet J

      Tästä kaikesta? Mä välitän susta oikeasti.
      Ikävä
      60
      940
    8. Belorf haistattaa seuraajiaan "You can hate me now"...

      Vai haistattaako lompakkoa, joka taisi viimeinkin ymmärtää häipyä Sofian ulottumattomiin ? Sofia raukka on niin typerä, että ottaa nostetta "omasta tv
      Kotimaiset julkkisjuorut
      57
      926
    Aihe