ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
592
592
EMPFEHLEN
-
15.03.08 12:08 #1
- Registriert seit
- Jan 2008
- Beiträge
- 81
Hallo zusammen
ich weiss ist ne einfache sache aber irgendwie krieg ichs nicht raus:
Code :1 2 3 4 5 6 7 8
public void keyReleased(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { FormelParser fp1 = new FormelParser(); //tfZaehler. System.out.println(tfZaehler.getText().toString()); //fp1.setEquation(tfZaehler.getText()); } }
Im obigen Code will ich den Text eines JTextField erhalten.... nach Enter drücken soll das passieren.... aber als Ausgabe erhalte ich nur einen leeren String.... muss man irgendwie den Focus stoppen um den Inhalt des Textfeldes zu bekommen? wie?
MFG Marius Meier
-
Das sollte funktionieren:
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
import java.awt.BorderLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JTextField; public class JTextFieldTest implements KeyListener{ JTextField tfZaehler = new JTextField(); public void keyReleased(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { System.out.println(tfZaehler.getText()); //fp1.setEquation(tfZaehler.getText()); } } private void createAndShowGUI() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(tfZaehler, BorderLayout.CENTER); tfZaehler.addKeyListener(this); frame.setSize(100, 100); frame.setVisible(true); } public JTextFieldTest(){ createAndShowGUI(); } public static void main(String[] args) { new JTextFieldTest(); } @Override public void keyPressed(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } }
-
15.03.08 12:43 #3
- Registriert seit
- Jan 2008
- Beiträge
- 81
Mh? Mir scheint das immer noch das gleiche zu sein wie mein Code bzw. das funktioniert nicht. Andere Vorschläge?
MFG Marius Meier
-
also bei mir funktioniert es, keine ahnung warum es bei dir nicht geht..
poste mal deinen ganzen code damit ich den testen kann.
-
15.03.08 12:52 #5
- Registriert seit
- Jan 2008
- Beiträge
- 81
OK hier ist Code:
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
package GUI; import javax.swing.*; import ParseEngine.FormelParser; import java.awt.*; import java.awt.event.*; public class p2GUI extends JFrame{ private JSpinner ordnungFilter; private JTextField tfZaehler; private JLabel lblZaehler; private JLabel lblVarWerte; public p2GUI(String title) { super(title); setLayout(null); valuePanel vp = new valuePanel(); vp.setBounds(600, 10, 300, 300); add(vp); formelPanel fp = new formelPanel(); fp.setBounds(100, 10, 300, 300); add(fp); optionPanel op = new optionPanel(); op.setBounds(10, 400, 200, 300); add(op); } private class formelPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); this.setLayout(null); tfZaehler = new JTextField(); tfZaehler.setBounds(70, 10, 200, 20); tfZaehler.addKeyListener(new formelKeyListener()); add(tfZaehler); lblZaehler = new JLabel("Zähler: "); lblZaehler.setBounds(10, 10, 60, 20); add(lblZaehler); } } private class valuePanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); this.setLayout(null); lblVarWerte = new JLabel("Werte für Variabel setzen: "); lblVarWerte.setBounds(10, 10, 160, 20); add(lblVarWerte); } } private class optionPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); this.setLayout(null); ordnungFilter = new JSpinner(new SpinnerNumberModel(12,0,20,2)); JFormattedTextField tf = ((JSpinner.DefaultEditor)ordnungFilter.getEditor()).getTextField(); tf.setEditable(false); ordnungFilter.setBounds(10, 10, 50, 20); this.add(ordnungFilter); } } public class formelKeyListener implements KeyListener { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { FormelParser fp1 = new FormelParser(); //tfZaehler. System.out.println(tfZaehler.getText()); //fp1.setEquation(tfZaehler.getText()); } } } public static void main(String[] args) { p2GUI fenster = new p2GUI("Active filter design"); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); fenster.setSize(dim); fenster.setVisible(true); } }
Den code kannst du nicht testen weil du warscheindlich die jep-Bibliothek nicht hast. Aber villeicht siehst du ja woanders das Problem?
MFG Marius Meier
-
Ich habe den import einfach entfern um nur das Feld zu testen aber leider muss ich sagen das es bei mir funktioniert
Welche Java Version benutzt du? (Obwohl dies auch bei den alten funktionieren sollte)
Ich habe im Moment jdk 1.6.0_01
-
15.03.08 13:03 #7
- Registriert seit
- Jan 2008
- Beiträge
- 81
mh ja ersdtaundlicherweise funktionierts wirklich... aber ich weiss was mein problem ist... wenn du das fenster mit der Maus verkleinerst und dann wieder ein Wert ins Textfeld schreibts und Enter drückst gibt die Konsole einen leeren String aus... warum hat das was damit zu tun dass das Panel den Focus verliert ?
MFG Marius Meier
-
ok ich hab das problem
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
package de.ms.tableests; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class p2GUI extends JFrame{ private JSpinner ordnungFilter; private JTextField tfZaehler; private JLabel lblZaehler; private JLabel lblVarWerte; public p2GUI(String title) { super(title); setLayout(null); valuePanel vp = new valuePanel(); vp.setBounds(600, 10, 300, 300); add(vp); formelPanel fp = new formelPanel(); fp.setFocusable(true); fp.setBounds(100, 10, 300, 300); add(fp); optionPanel op = new optionPanel(); op.setBounds(10, 400, 200, 300); add(op); } private class formelPanel extends JPanel { public formelPanel(){ this.setLayout(null); tfZaehler = new JTextField(); tfZaehler.setBounds(70, 10, 200, 20); tfZaehler.addKeyListener(new formelKeyListener()); add(tfZaehler); lblZaehler = new JLabel("Zähler: "); lblZaehler.setBounds(10, 10, 60, 20); add(lblZaehler); } public void paintComponent(Graphics g) { super.paintComponent(g); } } private class valuePanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); this.setLayout(null); lblVarWerte = new JLabel("Werte für Variabel setzen: "); lblVarWerte.setBounds(10, 10, 160, 20); add(lblVarWerte); } } private class optionPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); this.setLayout(null); ordnungFilter = new JSpinner(new SpinnerNumberModel(12,0,20,2)); JFormattedTextField tf = ((JSpinner.DefaultEditor)ordnungFilter.getEditor()).getTextField(); tf.setEditable(false); ordnungFilter.setBounds(10, 10, 50, 20); this.add(ordnungFilter); } } public class formelKeyListener implements KeyListener { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { //FormelParser fp1 = new FormelParser(); //tfZaehler. System.out.println(tfZaehler.getText()); //fp1.setEquation(tfZaehler.getText()); } } } public static void main(String[] args) { p2GUI fenster = new p2GUI("Active filter design"); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); fenster.setSize(dim); fenster.setVisible(true); } }
Schau dir das an:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public void paintComponent(Graphics g) { super.paintComponent(g); this.setLayout(null); tfZaehler = new JTextField(); tfZaehler.setBounds(70, 10, 200, 20); tfZaehler.addKeyListener(new formelKeyListener()); add(tfZaehler); lblZaehler = new JLabel("Zähler: "); lblZaehler.setBounds(10, 10, 60, 20); add(lblZaehler); }
Jedesmal wenn die Komponente neu "gezeichnet" wird, wird ein neues JTxtField usw. erstellt.
Ändere es das es etwa so aussieht:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
private class formelPanel extends JPanel { public formelPanel(){ this.setLayout(null); tfZaehler = new JTextField(); tfZaehler.setBounds(70, 10, 200, 20); tfZaehler.addKeyListener(new formelKeyListener()); add(tfZaehler); lblZaehler = new JLabel("Zähler: "); lblZaehler.setBounds(10, 10, 60, 20); add(lblZaehler); } public void paintComponent(Graphics g) { super.paintComponent(g); } }
Mach das am besten mit allen JPanels usw.
-
15.03.08 13:31 #9
- Registriert seit
- Jan 2008
- Beiträge
- 81
Ok ja du hast recht. Die Komponenten werden immer wieder gezeichnet. Habs jetzt so gäendert wie du es mir empfohlen hast. Funktioniert einwandfrei! Danke!
Trotzdem noch ne Frage: Im prinzip hätte ich ja abfragen können ob das JTextfield schon mal gezeichnet wurde mit einem IF-Statement... egal aber etwas verstehe ich nicht.
Ist demfall die paintComponent nur für Zeichnungen (Linien, Kreise, Rechtecke, ... usw.) geeignet?
Ich habe das JPanel genommen weil ich noch neben den Komponenten eine Linie zeichnen möchte....
MFG Marius Meier
-
ICh kenne mich nicht 100 % mit den paint Methoden aus, aber jedesmal wenn ein Komponent sich ändert wird die Methode ausgeführt um die Komponente darzustellen.
Es ist nicht sinvoll in der paint Methode Objekte zu erzeugen.
Wenn du Zeichnen willst kannst du das immer noch.
Zeichnen kannst du theoretisch überall in Jbuttons, JFrame, Jpanel, JLabel usw.
Ähnliche Themen
-
JTextField & JPopupMenu
Von PeteProgram im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 16Letzter Beitrag: 15.11.10, 16:16 -
JTextField
Von Maddimini im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 26.04.10, 08:55 -
JTextField bzw JFormattedTextField
Von MScalli im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 26.05.08, 12:53 -
JTextField
Von dadon511 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 26.03.07, 16:56 -
DnD JTree & JTextField
Von flashOr im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 31.01.06, 12:35





Zitieren
Login





