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?
// 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?
Vastaukset 3
Vanhimmat
Swing:istä enempiä ymmärtämätön kysyy: Mikä on muuttujan i merkitys?
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());
}
}
**************************************'
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ä.