2017-04-25 3 views
0

Ich mache einen Währungsrechner und ich habe ein Problem mit nicht in der Lage, das Ergebnis der Berechnung in das Ergebnis JTextField, die das Objekt OtherTextField ist.Warum funktioniert SetText von JTextField nicht in der actionPerformed-Methode?

Hier ist meine Klasse:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class ValutaKalkulator implements ActionListener { 
    private double nokValue; 
    private double otherValue; 
    private JButton buttonRemoveNok; 
    private JButton removeOther; 
    private JButton removeBoth; 
    private JButton exitButton; 
    private JButton usdButton; 
    private JButton sekButton; 
    private JButton gbpButton; 
    private JButton eurButton; 
    private JLabel nokLabel; 
    private JTextField nokTextField; 
    private JLabel otherLabel; 
    private JTextField otherTextField; 

    public ValutaKalkulator() 
    { 
     JFrame frame = new JFrame(); 
     frame.setTitle("VALUTAKALKULATOR"); 
     buttonRemoveNok = new JButton("Fjern NOK"); 
     removeOther = new JButton("Fjern annen valuta"); 
     removeBoth = new JButton("Fjern begge"); 
     exitButton = new JButton("Avslutt"); 
     usdButton = new JButton("USD"); 
     sekButton = new JButton("SEK"); 
     gbpButton = new JButton("GBP"); 
     eurButton = new JButton("EUR"); 
     nokLabel = new JLabel("NOK"); 
     JTextField nokTextField = new JTextField(); 
     otherLabel = new JLabel("Annen valuta"); 
     otherTextField = new JTextField(); 

     buttonRemoveNok.addActionListener(this); 
     removeOther.addActionListener(this); 
     removeBoth.addActionListener(this); 
     exitButton.addActionListener(this); 
     usdButton.addActionListener(this); 
     sekButton.addActionListener(this); 
     gbpButton.addActionListener(this); 
     eurButton.addActionListener(this); 

     JPanel pnlSouth = new JPanel(new GridLayout(1, 4)); 
     JPanel pnlCenter = new JPanel(new GridLayout(2, 2)); 
     JPanel pnlNorth = new JPanel(new GridLayout(1, 4)); 

     pnlNorth.add(nokLabel); 
     pnlNorth.add(nokTextField); 
     pnlNorth.add(otherLabel); 
     pnlNorth.add(otherTextField); 

     pnlCenter.add(gbpButton); 
     pnlCenter.add(eurButton); 
     pnlCenter.add(usdButton); 
     pnlCenter.add(sekButton); 

     pnlSouth.add(buttonRemoveNok); 
     pnlSouth.add(removeOther); 
     pnlSouth.add(removeBoth); 
     pnlSouth.add(exitButton); 

     frame.add(pnlNorth, BorderLayout.NORTH); 
     frame.add(pnlSouth, BorderLayout.SOUTH); 
     frame.add(pnlCenter, BorderLayout.CENTER); 

     frame.setVisible(true); 
     frame.pack(); 

    } 

    public String calculateFromNok(String nokValueString, String toValue) 
    { 
     double result = 0; 
     double nokValue = Double.valueOf(nokValueString); 
     switch(toValue) 
     { 
      case "GBP": 
      result = nokValue * 10.8980/100; 
      break; 

      case "EUR": 
      result = nokValue * 9.2450/100; 
      break; 

      case "USD": 
      result = nokValue * 8.5223/100; 
      break; 

      case "SEK": 
      result = nokValue * 96.48/100; 
      break; 
     } 
     String resultString = Double.toString(result); 
     return resultString; 
    } 

    public void actionPerformed(ActionEvent event) 
    { 
     String text = event.getActionCommand(); 

     switch(text) 
     { 
      case "USD": 
      String txt = nokTextField.getText(); 
      String txt2 = calculateFromNok(txt, "USD"); 
      otherTextField.setText(txt2); 
      break; 

     } 
    } 
} 

Ich weiß, dass die Währungen nicht korrekt sind, und es gibt auch andere logische Fehler und schlechte Variablennamen, aber meine Frage ist nun, warum kann ich von der Methode das Ergebnis nicht gesetzt calculateFromNok in mein JTextField otherTextField?

Hilfe geschätzt thx!

+1

Versuchen Sie, Breakpoints zu setzen, und führen Sie den Debugger aus, nachdem Sie Ihre Fallkörper eingerückt haben. –

Antwort

1

Sie erstellen eine lokale Initialize-Variable JTextField nokTextField.
So private JTextField nokTextField; wird nicht initialisiert. Deshalb gibt es Ihnen eine Null-Null-Wahrnehmung.

Just Change bei der Zeilennummer 37:

JTextField nokTextField = new JTextField(); 

Um

nokTextField = new JTextField(); 
+0

Jesus Christus, wie kann ich so blind sein? Sie sehen, ich hatte zuerst die gesamte Instanziierung der Felder lokal im Konstruktor und dann verschoben sie aus, so dass es dort ist, muss ich vergessen haben, dies zu beheben. Gelöst. Danke Kumpel :) –

+0

Wenn es Ihr Problem gelöst hat, können Sie meine Antwort akzeptieren, so dass andere Benutzer es nützlich finden können –

0

Ihr Problem mit der Leitung ist:

JTextField nokTextField = new JTextField(); 

Ändern Sie es an:

nokTextField = new JTextField(); 

Der Grund dafür ist, dass Sie zuvor nokTextField oben definiert haben und dann eine separate Variable mit demselben Namen im Konstruktor initialisiert haben. Die Verwendung einer IDE wie Eclipse macht diese Art von Fehlern sehr einfach zu erfassen. Ich schlage vor, Sie benutzen einen.

+0

Vielen Dank! So schlampig .... –

Verwandte Themen