Avatar billede touel Nybegynder
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 ?
Avatar billede _carsten Nybegynder
16. september 2008 - 22:04 #1
transferFocus(); // flytter til næste komponent i den aktuelle FocusTraversalPolicy

du kan også bruge:  field_1.requestFocus();
Avatar billede touel Nybegynder
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
Avatar billede touel Nybegynder
16. september 2008 - 22:50 #3
ingen af metoderne virker hos mig....
Avatar billede schwarz84 Nybegynder
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.
Avatar billede _carsten Nybegynder
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
Avatar billede touel Nybegynder
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 () ?
Avatar billede touel Nybegynder
17. september 2008 - 13:23 #7
har løst det med actionListener.... glemte at hente java.awt.event.*
Avatar billede touel Nybegynder
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 ???
Avatar billede _carsten Nybegynder
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();
}
Avatar billede touel Nybegynder
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
Avatar billede _carsten Nybegynder
17. september 2008 - 14:31 #11
public class MinKlasse implements ActionListener{

        ............
        ......


    public void actionPerformed(ActionEvent e){
   
    }

}
Avatar billede touel Nybegynder
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
Avatar billede touel Nybegynder
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);
                    }
                });
    }
}
Avatar billede touel Nybegynder
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] ?
Avatar billede touel Nybegynder
17. september 2008 - 14:48 #15
smutter nu.. ses i aften efter 22.00

over and out :0)
Avatar billede _carsten Nybegynder
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();
    }
Avatar billede _carsten Nybegynder
18. september 2008 - 20:47 #17
copy/paste bøf

((JTextField)e.getSource()).transferFocus();
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester