2016-04-28 46 views
0

Ich mache ein Programm mit JButtons und JTextFields. Die ActionListeners funktionieren für JButtons, nicht jedoch für JTextFields.Java JTextField actionListener funktioniert nicht

public class Gui extends JFrame { 

private JButton Subject[] = new JButton[8]; 
private String SubjNames[] = {"Length", "Mass", "Currency", "Temperature", "Time", "Speed", "Data", "Cooking"}; 
private JButton Length1[] = new JButton[8]; 
private JButton Length2[] = new JButton[8]; 
private String LengNames[] = {"inches", "feet", "yards", "miles", "millimeters", "centimeters", "meters", "kilometers"}; 
private JTextField convertedFrom; 
private JTextField amountFrom; 
private JTextField convertedTo; 
private JTextField amountTo; 
private String from; 
private String CTo; 
private String ATo; 
private int SubjectLocX = 40; 
private int SubjectLocY = 50; 
private int Length1LocX = 40; 
private int Length1LocY = 150; 
private int Length2LocX = 330; 
private int Length2LocY = 150; 
private int t = 0; 

public Gui(){ 

    super("Converter"); 
    setLayout(null); 

    System.out.println("yes"); 

    for (int i = 0; i<8; i++) { 
    Subject[i] = new JButton(SubjNames[i]); 
    Subject[i].setLocation(SubjectLocX,SubjectLocY); 
    Subject[i].setSize(200,50); 
    add(Subject[i]); 
    if (i < 3) { 
     SubjectLocX = 40; 
     SubjectLocY += 100; 
    } else if (i == 3) { 
     SubjectLocX = 330; 
     SubjectLocY = 50; 
    } else if (i > 3) { 
     SubjectLocY += 100; 
     } 
    } 

    HandlerClass handler = new HandlerClass(); 

    for (int i = 0; i<8; i++) { 
    Subject[i].addActionListener(handler); 
    } 


    for (int i = 0; i<8; i++) { 
    Length1[i] = new JButton(LengNames[i]); 
    Length2[i] = new JButton(LengNames[i]); 
    } 
    convertedFrom = new JTextField(from, 20); 
    convertedTo = new JTextField(CTo, 20); 
    amountFrom = new JTextField("amount", 20); 
    amountFrom.addActionListener(handler); 
    amountTo = new JTextField(ATo, 20); 

    for (int i = 0; i<8; i++) { 
     Length1[i].addActionListener(handler); 
     Length2[i].addActionListener(handler); 
     } 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(600,500); 
    setLocation(400,200); 
    setVisible(true); 
} 

public void Step2() { 

    for (int i = 0; i<8; i++) { 
     remove(Subject[i]); 
    } 
    for (int i = 0; i<8; i++) { 
     remove(Length1[i]); 
     remove(Length2[i]); 
    } 
    remove(convertedFrom); 
    remove(convertedTo); 
    remove(amountFrom); 
    remove(amountTo); 

    HandlerClass handler = new HandlerClass(); 

    convertedFrom = new JTextField(from, 20); 
    convertedFrom.setEditable(false); 
    convertedFrom.setLocation(40,50); 
    convertedFrom.setSize(200,30); 
    add(convertedFrom); 

    convertedTo = new JTextField(CTo, 20); 
    convertedTo.setEditable(false); 
    convertedTo.setLocation(330,50); 
    convertedTo.setSize(200,30); 
    add(convertedTo); 

    amountFrom = new JTextField("amount", 20); 
    amountFrom.setLocation(40,100); 
    amountFrom.setSize(200,30); 
    add(amountFrom); 

    amountTo = new JTextField(ATo, 20); 
    amountTo.setEditable(false); 
    amountTo.setLocation(330,100); 
    amountTo.setSize(200,30); 
    add(amountTo); 

    Length1LocX = 40; 
    Length1LocY = 150; 
    Length2LocX = 330; 
    Length2LocY = 150; 

    for (int i = 0; i<8; i++) { 
     Length1[i].setLocation(Length1LocX, Length1LocY); 
     Length1[i].setSize(90, 50); 
     add(Length1[i]); 
     if (i < 3) { 
      Length1LocX = 40; 
      Length1LocY += 100; 
     } else if (i == 3) { 
      Length1LocX = 150; 
      Length1LocY = 150; 
     } else if (i > 3) { 
      Length1LocY += 100; 
      } 
     Length2[i].setLocation(Length2LocX, Length2LocY); 
     Length2[i].setSize(90, 50); 
     add(Length2[i]); 
     if (i < 3) { 
      Length2LocX = 330; 
      Length2LocY += 100; 
     } else if (i == 3) { 
      Length2LocX = 440; 
      Length2LocY = 150; 
     } else if (i > 3) { 
      Length2LocY += 100; 
      } 
    } 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(600,600); 
    setLocation(400,200); 
    setVisible(true); 
} 
private class HandlerClass implements ActionListener { 
    public void actionPerformed(ActionEvent event) { 
     System.out.println("bruhhh"); 
     if (event.getSource() == amountFrom) { 
      System.out.println("works"); 
     } 
     for (int i = 0; i<8; i++) { 
      if (event.getSource() == Length1[i]) { 
       from = event.getActionCommand(); 
      } 
      if (event.getSource() == Length2[i]) { 
       CTo = event.getActionCommand(); 
      } 
     } 

     Step2(); 
    } 
} 
} 

In der Mitte meines Gui Konstruktor, das „amountFrom“ TextField- erstellt wird, und dann füge ich ein Action. Dann unten in der ActionHandler-Klasse I Suche nach dem Ereignis. Allerdings, wenn ich das Programm ausführen (klicken Sie auf "Länge") und ändern Sie dann die Menge aus dem Textfeld und drücken Sie die Eingabetaste, bekomme ich keine Konsole drucken (es soll "funktioniert" auf der Konsole drucken, wenn die Aktion textField tritt ein). Alle anderen Jbutton actionlistener funktionieren, aber dieser textfield actionListener funktioniert nicht.

Antwort

1

In Ihrem Konstruktor fügen Sie den ActionListener zu Ihrem JTextField hinzu.

amountFrom = new JTextField("amount", 20); 
amountFrom.addActionListener(handler); 

Aber in Ihrer Methode Step2() Sie eine neue Instanz eines JTextField erstellen und fügen Sie keinen Hörer zu.

amountFrom = new JTextField("amount", 20); 
amountFrom.setLocation(40,100); 
amountFrom.setSize(200,30); 
add(amountFrom); 


Hinweis: haben Sie einen Blick auf Layoutmanager und betrachten Sie sie verwenden. https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

+0

Ehrfürchtig, Danke viel! und ja, ich muss wieder in Layoutmanager schauen. Ich habe es anfangs nie benutzt, weil ich nicht wusste, ob es eine mit einem Spaltenstil-Layout wie ich es momentan war. (Und wenn ich noch einen zufälligen Knopf hinzufügen wollte, wie zum Beispiel einen Zurück-Knopf in der Ecke, war ich nicht sicher, ob es mir das erlauben würde). – airide101

Verwandte Themen