Problem z JtextField i KeyListenerem

0

To tylko kawałek programu, ma on za zadanie klawiszem enter pobrać liczbę z JTextFielda i wydrukowac ją. Jednak program działa tylko wtedy, gdy odgórnie, w kodzie programu, zdefiniuję jakąś liczbę. Gdy chcę wprowadzić ją do TextFielda ręcznie, to gdy zakliknę pole, keylistener przestaje wykonywać swoje zadanie, przy naciśnięciu entera nic się nie dzieje. Chciałbym wiedzieć jaka jest tego przyczyna...

public class Main {

    public static void main(String[] args) {
   SwingUtilities.invokeLater(new Runnable(){
       public void run(){
           createAndShowGUI();

       }
   });
    }


public static void createAndShowGUI(){
    JFrame f = new JFrame("funkcja liniowa");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(1890,1050);
    f.setLocationRelativeTo(null);
    f.setVisible(true);



        f.setResizable(true);


      f.add(new MyPanel2());




}
}
class MyPanel2 extends JPanel{

     JPanel panel2;
     JTextField jtf1, jtf2;
     JLabel jlb1, jlb2;
     int b;

     public MyPanel2(){
         

      panel2= new JPanel();

     





         jtf1 = new JTextField();
              panel2.setBounds(1194, 50, 250, 500);
         panel2.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            this.setLayout(null);
            panel2.setLayout(null);


         jtf1.setBounds(60,50, 130, 21);
          this.add(panel2);
         panel2.add(jtf1);
              addKeyListener(new KeyAdapter(){
        @Override
        public void keyPressed(KeyEvent e){
            int KeyCode = e.getKeyCode();

            if(KeyCode == KeyEvent.VK_ENTER){
            

         b = Integer.parseInt(jtf2.getText());
         System.out.println(b);
            }
            }
        });
     }
}
0

Trochę chaosu jest w kodzie, ale to pewnie dlatego, że jest to wycięta część programu.
Tworzysz w obiekcie zmienne na dwa obiekty pól tekstowych, jednak tylko do jtf1 przypisujesz nowy obiekt. jtf2 jest null'em, mimo tego do zmiennej b właśnie z niego próbujesz parsować zawartość.

Natomiast KeyListener podpinasz pod panel MyPanel2, gdzie chyba chodziło o podpięcie go pod pole tekstowe.
Jeśli tak, linię

addKeyListener(new KeyAdapter(){

zmień na:

jtf1.addKeyListener(new KeyAdapter(){
0

Tak faktycznie masz rację, zapomniałem przypisać listenera do konkretnego JTextFielda. A odwołanie się do nulla to na szczęście tylko błąd przy przepisywaniu programu z kompilatora na forum, źle pokopiowałem wycinki. Dzięki :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1