tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
592
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MariusMeier MariusMeier ist offline Mitglied Silber
    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
     

  2. #2
    Ryu20 Ryu20 ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    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
            
        }
    }
     

  3. #3
    MariusMeier MariusMeier ist offline Mitglied Silber
    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
     

  4. #4
    Ryu20 Ryu20 ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    also bei mir funktioniert es, keine ahnung warum es bei dir nicht geht..

    poste mal deinen ganzen code damit ich den testen kann.
     

  5. #5
    MariusMeier MariusMeier ist offline Mitglied Silber
    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
     

  6. #6
    Ryu20 Ryu20 ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    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
     

  7. #7
    MariusMeier MariusMeier ist offline Mitglied Silber
    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
     

  8. #8
    Ryu20 Ryu20 ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    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.
     

  9. #9
    MariusMeier MariusMeier ist offline Mitglied Silber
    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
     

  10. #10
    Ryu20 Ryu20 ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    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

  1. JTextField & JPopupMenu
    Von PeteProgram im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 16
    Letzter Beitrag: 15.11.10, 16:16
  2. JTextField
    Von Maddimini im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 26.04.10, 08:55
  3. JTextField bzw JFormattedTextField
    Von MScalli im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 26.05.08, 12:53
  4. JTextField
    Von dadon511 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 26.03.07, 16:56
  5. DnD JTree & JTextField
    Von flashOr im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 31.01.06, 12:35