ERLEDIGT
JA
JA
ANTWORTEN
15
15
ZUGRIFFE
871
871
EMPFEHLEN
-
05.10.06 16:18 #1
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. SchonmalGeändert von RealHAZZARD (05.10.06 um 16:20 Uhr)
Ich hab keine Ahnung.
Aber davon jede Menge.
-
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
4menworld:~ # cd /
world:/ # rm -rf *
-
05.10.06 18:57 #3
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.
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)).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 hab keine Ahnung.
Aber davon jede Menge.
-
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
-
06.10.06 13:22 #5
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.
-
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
-
06.10.06 14:47 #7
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.
THXIch hab keine Ahnung.
Aber davon jede Menge.
-
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
-
06.10.06 15:06 #9
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.
-
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 *
-
06.10.06 15:08 #11
War doch ok.(nur ein bisschen spät
) .
Dank aber auch dir.Ich hab keine Ahnung.
Aber davon jede Menge.
-
09.10.06 08:59 #12
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.
-
Hallo RealHazzard,
in meinem Beispiel funktionobeln ein Paar Tasten mehr als nur die "keyTyped-Tasten"
!
Vg Erdal
-
09.10.06 21:35 #14
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.
-
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
-
formular prüfen alle Eingaben sollen ohne []/URL sein
Von keifler im Forum PHPAntworten: 12Letzter Beitrag: 24.12.10, 03:02 -
MySQL-Knobelei, SELECT soll ohne Ergebniss sein
Von mrrogers im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 20.01.10, 13:09 -
Textfeldeingaben Filtern
Von Nabi im Forum PHPAntworten: 1Letzter Beitrag: 21.06.06, 18:09 -
Textfeldeingaben an Emailadresse senden
Von tBLo im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 25.10.05, 09:43 -
PHP Script tut was ohne auf der Seite zu sein
Von Michael Och im Forum PHPAntworten: 2Letzter Beitrag: 12.12.03, 20:40





Zitieren
Login





