16. september 2008 - 21:37
Der er
16 kommentarer og 1 løsning
Spg vedr ActionListener
Hvad skal man skrive i ActionPerformed (), hvis man ønsker at trykke på Enter for at hoppe fra en JTextField til en anden JTextField ?
Annonceindlæg fra Computerworld it-jobbank
Mød 3.500+ it-talenter på IT-DAY 2026
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
16. september 2008 - 22:04
#1
transferFocus(); // flytter til næste komponent i den aktuelle FocusTraversalPolicy du kan også bruge: field_1.requestFocus();
16. september 2008 - 22:33
#2
jeg har følgende sætning : p1.add(felt[i]); //hvor p1 er JPanel og felt er JTextField. Hvis jeg tilføjer en requestFocus () efter [i], giver den fejl og siger at p1.add forventer en component og ikke en void
16. september 2008 - 22:50
#3
ingen af metoderne virker hos mig....
17. september 2008 - 07:50
#4
Du skal nok prøve: JTextField t = felt[i]; p1.add(t); t.requestFocus(); i stedet for. Det andet giver vist ikke så meget mening.
17. september 2008 - 10:25
#5
Ja - det kan du ikke, det var jo i din actionPerformed du skulle tilføje det. Jeg går ud fra at felt[i] har class scope, så den skal ligge i felt[x]'s actionPerformed, alternativt kan du lade din actionPerformed kallde en class metode og styre det derfra
17. september 2008 - 13:15
#6
Det står sådan hos mig nu : for(int i = 0; i < 10; i++) { felt[i] = new JTextField(10); p1.add(new JLabel("felt" + i + ": ")); p1.add(felt[i]); felt[i].addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ felt[i].requestFocus(); } }); } Men new ActionListener () er markeret med rødt ??? og siger at actionlistener cannot be resolved to a type. Jeg formoder at den ikke kan finde ud af at læse felt[i] inde i actionPerformed () ?
17. september 2008 - 13:23
#7
har løst det med actionListener.... glemte at hente java.awt.event.*
17. september 2008 - 13:36
#8
nu er det felt[i] inde i actionPerformed som driller.. den kender sæføli ikke "i".... hvordan løser jeg den ???
17. september 2008 - 14:11
#9
Du lader din klasse implementerer actionListener og adder den til field[] eks: for(int i = 0; i < 10; i++) { felt[i] = new JTextField(10); p1.add(new JLabel("felt" + i + ": ")); p1.add(felt[i]); felt[i].addActionListener(this); } public void actionPerformed(ActionEvent e){ // Her kan du styre hvad der skal ske ((JTextField)e.getSource()).requestFocus(); }
17. september 2008 - 14:27
#10
Så har jeg skrevet det samme som dig, men parenteserne i actionPerformed er begge markeret med rødt ??? actionPerformed har jeg skr udenfor for løkken
17. september 2008 - 14:31
#11
public class MinKlasse implements ActionListener{ ............ ...... public void actionPerformed(ActionEvent e){ } }
17. september 2008 - 14:31
#12
fik løst med røde understregninger... men det virker stadig ikk... jeg skal stadig trykke på tabulator for at skifte
17. september 2008 - 14:33
#13
nu viser jeg koden for hele klassen.... import java.awt.*; import java.awt.event.*; import java.awt.event.ActionEvent; import javax.swing.*; public class IterationGUI extends JFrame implements ActionListener { public JFrame frame; public JPanel p1,p2,p3; public JTextField [] felt = new JTextField [30]; public JTextField output; public static String temp; public IterationGUI(String str){ frame = new JFrame("Gentag Password"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); output = new JTextField (); output.setSize(0,20); add(output,BorderLayout.NORTH); this.temp = str.toString(); output.setText(temp); p1 = new JPanel(); p1.setLayout(new GridLayout(10,2)); add(p1,BorderLayout.WEST); p2 = new JPanel(); p2.setLayout(new GridLayout(10,2)); add(p2,BorderLayout.CENTER); p3 = new JPanel(); p3.setLayout(new GridLayout(10,2)); add(p3,BorderLayout.EAST); for(int i = 0; i < 10; i++) { felt[i] = new JTextField(10); p1.add(new JLabel("felt" + i + ": ")); p1.add(felt[i]); felt[i].addActionListener(this); } for(int i = 10; i < 20; i++) { felt[i] = new JTextField(10); p2.add(new JLabel("felt" + i + ": ")); p2.add(felt[i]); felt[i].addActionListener(this); } for(int i = 20; i < 30; i++) { felt[i] = new JTextField(10); p3.add(new JLabel("felt" + i + ": ")); p3.add(felt[i]); felt[i].addActionListener(this); } pack(); setVisible(true); } public void actionPerformed(ActionEvent e){ ((JTextField)e.getSource()).requestFocus(); } public static void main(String [] args){ final String tmp; javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { IterationGUI gui = new IterationGUI (temp); } }); } }
17. september 2008 - 14:43
#14
ohhhhhhhhhhhhhhhhhh yeeeeeeeeeeeeeeeeaaaaaaaaaaaaaa Jeg skiftede requestfocus ud med transferfocus og VOILA det virker sgu :0) Inden du lægger svar, vil jeg bare lige spørge at når du skrev (JTextField)e.getSource..... står JTextField for felt[i] ?
17. september 2008 - 14:48
#15
smutter nu.. ses i aften efter 22.00 over and out :0)
18. september 2008 - 20:46
#16
Ja, det skal selvfølgelig være transferFocus() - min bøf ! Ja - et hvilket som helst JTextField i dit array En langt mere rigtig måde at gøre det på vil være, at checke om objectet er et JTextField Altså: public void actionPerformed(ActionEvent e){ if( e.getSource() instanceof JTextField) ((JTextField)e.getSource()).requestFocus(); }
18. september 2008 - 20:47
#17
copy/paste bøf ((JTextField)e.getSource()).transferFocus();
Kurser inden for grundlæggende programmering