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

306

    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. Epäily: Räppäri yritti tappaa vauvansa.

      https://www.mtvuutiset.fi/artikkeli/epaily-mies-yritti-tappaa-vauvansa/9300728 Tämä on erittäin järkyttävä teko täysin p
      Maailman menoa
      47
      5345
    2. Räppäri kuoli vankilassa

      Ei kuulemma ole tapahtunut rikosta. Sama vahinkohan kävi Epsteinille. https://www.hs.fi/suomi/art-2000011840869.html "
      Maailman menoa
      60
      2042
    3. Välillä kyllä tuntuu, että jaat vihjeitä

      Mutta miten niistä voi olla ollenkaan varma? Ja minä saan niistä kimmokkeen luulemaan yhtä sun toista. Eli mitä ajatella
      Ikävä
      18
      1750
    4. Onko Sanna menossa Ukrainaan viettämään vuosipäivää?

      Kun on bongattu Varsovan lentokentältä?
      Maailman menoa
      138
      1723
    5. Aleksi Rytilä

      Räppäri saa haluamaansa julkisuutta.
      Kotimaiset julkkisjuorut
      14
      1445
    6. No kyllä te luuserit voitte tehdä mitä vaan keskenänne, sitä en ymmärrä miksi pelaat,nainen

      Pisteesi silmissäni, edes ystävätasolla tippui jo tuhannella, kun sain selville pelailusi, olet toisen kanssa, vaikka ol
      Ikävä
      30
      1397
    7. Kulukusuunnat

      Eikö kuhmolaiset iha oikiasti tiiä kumpi o vasen ja kumpi oikia? Tuolla ku liikennemerkissä näkyy nuolet ylös ja alas, v
      Kuhmo
      4
      1300
    8. 81-vuotias Frederik avoimena - Ei omasta mielestä kelpaa tästä syystä realityihin: "Veemäinen..."

      Junttidiscon kuninkaana tunnettu Frederik, 81, on esiintymislavoilla suvereeni tekijä. Mies on viihdyttänyt ympäri Suome
      Suomalaiset julkkikset
      17
      1087
    9. Muusikko yritti tappaa kaksiviikkoisen vauvan

      Karu epäily: Muusikko, 32, yritti tappaa kaksiviikkoisen vauvan Oulussa. IS:n selvityksen perusteella miestä ei ole syy
      Maailman menoa
      77
      1048
    10. Tynkä Eläintarha ei ole enää visiitin väärti

      Ähtärin MesiZoo on vajonnut alas. Näytillä olevien eläinten määrä on romahtanut lähemmäs -40%. Paikat ovat päässeet pah
      Ähtäri
      60
      887
    Aihe