tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
15
ZUGRIFFE
871
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Servus.

    Ich hab da mal ein Problem:
    Ich befinde mich fokusmäßig auf der Jlist (und da möchte ich auch bleiben). Wenn ich jetzt eine Taste (Buchstabe oder Backspace) drücke, möchte ich das an das Textfeld weiterleiten. Ich dachte ich mache das mit meinTextfeld.dispatchEvent(meinKeyEvent). Aber das geht nicht. Es geht auch nicht wenn das Textfeld den Fokus hat.
    Ich hab auch schonmal dem textfeld nen KeyListener spendiert, um da ab zu fangen, ob das event überhaupt am textfeld ankommt. Das Event kommt an!
    Ich versteh es nicht!

    Hier mein Ansatz:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    
    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.GridBagLayout;
    import javax.swing.JTextField;
    import java.awt.Rectangle;
    import javax.swing.JButton;
    import javax.swing.JList;
     
    public class Fenster extends JFrame {
     
        private static final long serialVersionUID = 1L;
        private JPanel jPanel = null;
        private JTextField jTextField1 = null;
        private JList jList = null;
        /**
         * This is the default constructor
         */
        public Fenster() {
            super();
            initialize();
        }
     
        /**
         * This method initializes this
         * 
         * @return void
         */
        private void initialize() {
            this.setSize(300, 200);
            this.setContentPane(getJPanel());
            this.setTitle("JFrame");
        }
     
        /**
         * This method initializes jPanel    
         *     
         * @return javax.swing.JPanel    
         */
        private JPanel getJPanel() {
            if (jPanel == null) {
                jPanel = new JPanel();
                jPanel.setLayout(null);
                jPanel.add(getJTextField1(), null);
                jPanel.add(getJList(), null);
            }
            return jPanel;
        }
     
        /**
         * This method initializes jTextField1    
         *     
         * @return javax.swing.JTextField    
         */
        private JTextField getJTextField1() {
            if (jTextField1 == null) {
                jTextField1 = new JTextField();
                jTextField1.setBounds(new Rectangle(14, 130, 264, 28));
                jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
                    public void keyReleased(java.awt.event.KeyEvent ke) {
                        System.out.println(ke.getKeyChar()); 
                    }
                });
            }
            return jTextField1;
        }
     
        /**
         * This method initializes jList    
         *     
         * @return javax.swing.JList    
         */
        private JList getJList() {
            if (jList == null) {
                jList = new JList();
                jList.setBounds(new Rectangle(12, 10, 263, 112));
                jList.addKeyListener(new java.awt.event.KeyAdapter() {
                    public void keyReleased(java.awt.event.KeyEvent ke) {
                        getJTextField1().dispatchEvent(ke);
                        System.out.println("key dispached"); 
                    }
                });
            }
            return jList;
        }
     
    }

    Ich hoffe Ihr könnt mir weierhelfen.
    Danke. Schonmal
    Geändert von RealHAZZARD (05.10.06 um 16:20 Uhr)
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  2. #2
    4men 4men ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    Hi

    Also du sagst dem Textfeld ja auch nicht was es mit dem Event machen soll also es kann ja nicht wissen das du die "Eingabe" angezeigt bekommen möchtest.

    Versuch es mal so. Hier wird halt jedes Zeichen einfach angehängt ( !auch Funktionstasten! ).

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    
    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.GridBagLayout;
    import javax.swing.JTextField;
    import java.awt.Rectangle;
    import javax.swing.JButton;
    import javax.swing.JList;
     
    public class Fenster extends JFrame {
     
        private static final long serialVersionUID = 1L;
        private JPanel jPanel = null;
        private JTextField jTextField1 = null;
        private JList jList = null;
        /**
         * This is the default constructor
         */
        public Fenster() {
            super();
            initialize();
        }
     
        /**
         * This method initializes this
         * 
         * @return void
         */
        private void initialize() {
            this.setSize(300, 200);
            this.setContentPane(getJPanel());
            this.setTitle("JFrame");
        }
     
        /**
         * This method initializes jPanel    
         *     
         * @return javax.swing.JPanel    
         */
        private JPanel getJPanel() {
            if (jPanel == null) {
                jPanel = new JPanel();
                jPanel.setLayout(null);
                jPanel.add(getJTextField1(), null);
                jPanel.add(getJList(), null);
            }
            return jPanel;
        }
     
        /**
         * This method initializes jTextField1    
         *     
         * @return javax.swing.JTextField    
         */
        private JTextField getJTextField1() {
            if (jTextField1 == null) {
                jTextField1 = new JTextField();
                jTextField1.setBounds(new Rectangle(14, 130, 264, 28));
                jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
                    public void keyReleased(java.awt.event.KeyEvent ke) {
                        System.out.println(ke.getKeyChar());
                        [B]jTextField1.setText(jTextField1.getText() + ke.getKeyChar());[/B]
                    }
                });
            }
            return jTextField1;
        }
     
        /**
         * This method initializes jList    
         *     
         * @return javax.swing.JList    
         */
        private JList getJList() {
            if (jList == null) {
                jList = new JList();
                jList.setBounds(new Rectangle(12, 10, 263, 112));
                jList.addKeyListener(new java.awt.event.KeyAdapter() {
                    public void keyReleased(java.awt.event.KeyEvent ke) {
                        getJTextField1().dispatchEvent(ke);
                        System.out.println("key dispached"); 
                    }
                });
            }
            return jList;
        }
     
    }

    Grüße
    4men
     
    world:~ # cd /
    world:/ # rm -rf *

  3. #3
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Hallo.
    Danke für die schnelle Antwort. Aber das hatte ich in einem früheren Lösungsansatzt auch schonmal versucht. Das ist aber nicht ganz was ich möchte. Ich möchte das Event einfach nur an das Textfeld weiterreichen, und das sollte dann die Reaktion zeigen, die es sonst beim direkten Event auch zeig.
    Also du sagst dem Textfeld ja auch nicht was es mit dem Event machen soll also es kann ja nicht wissen das du die "Eingabe" angezeigt bekommen möchtest.
    Ich hoffte eigentlich darauf, dass das Textfeld das tut, was es auch sonst immer tut, wenn das Event direkt stattgefunden hat (also zB. die direkte Eingabe in das Textfeld(da rafft das Textfeld es ja auch, dass es jetzt nen Buchstaben mehr darstellen, oder gar einen weglöschen soll)).
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  4. #4
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo RealHazzard,

    hast du es schon mal mit der Klasse Robot{} versucht? Dieser stellt Methoden bereit mit der du Maus- und Tastatur eingaben simulieren kannst.


    Vg Erdal
     

  5. #5
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Danke, aber das **** auch nicht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    ...
    private JList getJList() {
            if (jList == null) {
                jList = new JList();
                jList.setBounds(new Rectangle(12, 10, 263, 112));
                jList.addKeyListener(new java.awt.event.KeyAdapter() {
                    public void keyReleased(java.awt.event.KeyEvent ke) {
                        getJTextField1().requestFocusInWindow();
                        getRobo().keyPress(ke.getKeyCode());
                        jList.requestFocusInWindow();
                        System.out.println("key pressed"); 
                    }
                });
            }
            return jList;
        }
    ...

    Nicht dass er einen Fehler bringt, nein. Er tut es einfach nur nicht!
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  6. #6
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo RealHazzard,

    dein erster Ansatz war richtig aber nicht vollständig.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
    import java.awt.BorderLayout;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JTextField;
     
    public class ListFieldExample extends JFrame {
     
        private JList list = new JList(new String[] { "SWT", "Swing", "AWT", "JMX",
                "Spring Framework", "JDOM" });
     
        private JTextField tField = new JTextField();
     
        public ListFieldExample() {
            this.setTitle(this.getClass().getCanonicalName());
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setAlwaysOnTop(true);
            this.setLocationByPlatform(true);
     
            this.add(list, BorderLayout.CENTER);
            this.add(tField, BorderLayout.SOUTH);
     
            list.addKeyListener(new KeyListener() {
                public void keyPressed(KeyEvent e) {
                    tField.dispatchEvent(e);
                }
     
                public void keyReleased(KeyEvent e) {
                    tField.dispatchEvent(e);
                }
     
                public void keyTyped(KeyEvent e) {
                    tField.dispatchEvent(e);
                }
     
            });
     
            list.setSelectedIndex(0);
     
            this.pack();
            this.setVisible(true);
        }
     
        public static void main(String[] args) {
            new ListFieldExample();
        }
    }


    Vg Erdal
     

  7. #7
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Danke. Habe es ausprobiert und es funktioniert. Aber kannst du mir zeigen welche Zeile es nun ist die dein Beispiel von meinem unterscheidet?
    Ich kanns nicht finden.
    THX
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  8. #8
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Gerne. Ich habe alle Methoden des Keylisteners implementiert. Nicht jede Taste wird von jeder Methode registriert, deswegen sollte man fall einem alle Tastatureingaben interessieren auch alle Methoden implementieren.


    Vg Erdal
     

  9. #9
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Ah ja. Tausend Dank.
    Das Textfeld interessiert sich nur für die KeyTyped-Methode!
    So kann ich dank dir beruhigt in das Wochenende starten.
    Tschüss.
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  10. #10
    4men 4men ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    Hi

    es ist die Methode keyTyped welche in dem speziellen Fall greift. Aber das ist ja nun nicht mehr nötig ...

    Gruß 4men

    PS wollte die Lösung auch grad posten.
     
    world:~ # cd /
    world:/ # rm -rf *

  11. #11
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    War doch ok.(nur ein bisschen spät ) .
    Dank aber auch dir.
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  12. #12
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Wäre auch zu schön, wenn schon alles funtionobeln würde.
    Wenn ich Kontrolltasten/(backspace,Entf) drücke, tut das nix.
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  13. #13
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo RealHazzard,

    in meinem Beispiel funktionobeln ein Paar Tasten mehr als nur die "keyTyped-Tasten" !


    Vg Erdal
     

  14. #14
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Oh.du hast natürlich recht. War mir nicht ganz klar dass das Textfield die einen keys by typed und andere wiederum by pressed verarbeitet. Aber im Nachhinein macht das schon Sinn. Jetzt funktionierts und ich glaub jetzt hab auch ich es verstanden.
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  15. #15
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo RealHazzard,

    das Problem hierbei wie sooft war, das allein aus den Methodennamen des KeyListeners nicht zu erschließen ist, wie sie funktionobelt() , wie sich die Designer das vorgestellt haben. Das die Methoden keyTyped(), keyPressed() und keyReleased() so arbeiten und implementiert sind wie sie es jetzt tun ist nicht unbedingt intuitiv.


    Vg Erdal
     

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 24.12.10, 03:02
  2. MySQL-Knobelei, SELECT soll ohne Ergebniss sein
    Von mrrogers im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 20.01.10, 13:09
  3. Textfeldeingaben Filtern
    Von Nabi im Forum PHP
    Antworten: 1
    Letzter Beitrag: 21.06.06, 18:09
  4. Textfeldeingaben an Emailadresse senden
    Von tBLo im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 25.10.05, 09:43
  5. PHP Script tut was ohne auf der Seite zu sein
    Von Michael Och im Forum PHP
    Antworten: 2
    Letzter Beitrag: 12.12.03, 20:40