2016-06-06 10 views
1

Hallo Java-Experte, Ich versuche Java zu lernen. Also habe ich ein grundlegendes Problem geübt. In diesem Fall ist es meine Idee, dem Benutzer zwei Zahlen zu geben und diese dann basierend auf der Benutzeranforderung (plus/minus) zu berechnen. Was ich leicht machen kann, aber ich versuche, dieses Problem in JFrame zu implementieren und habe nicht erreicht, was ich tun möchte !! Ich bekomme den Fehler, wenn ich versuche, diese Zahlen über window.number1 und window.number2 zu übergeben. Fehlermeldung:Call statische Methode von einer Klasse zu Jframe-Klasse

window cannot be resolved to a variable 

So jemand kann mir helfen, herauszufinden, wo ich mein Programm ändern muß.

Calculate.java

package day1.examples; 

public class Calculate { 
    double number1; 
    double number2; 
    public double[] calculateNumber() { 
     double plus = number1+number2; 
     double minus = number1-number2; 
     return new double[] {plus,minus}; 

    } 

} 

TestCalculate.java

package day1.examples; 

import java.awt.EventQueue; 
import java.awt.Window; 

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JLabel; 
import java.awt.Font; 
import javax.swing.JComboBox; 
import javax.swing.DefaultComboBoxModel; 

public class TestCalculate { 

    private JFrame frame; 
    private JTextField textFieldNum1; 
    private JTextField textFieldNum2; 
    private JTextField textFieldTotRes; 
    private JLabel lblNewTlabelTotNum; 
    private JLabel lblNewLabelNum1; 
    private JLabel lblNewLabelNum2; 
    private JComboBox<Object> comboBoxNum; 
    private double totalres; 
    private String itemselect; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        TestCalculate window = new TestCalculate(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public TestCalculate() { 
     initialize(); 

    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     textFieldNum1 = new JTextField(); 
     textFieldNum1.setBounds(10, 37, 106, 25); 
     frame.getContentPane().add(textFieldNum1); 
     textFieldNum1.setColumns(10); 

     textFieldNum2 = new JTextField(); 
     textFieldNum2.setBounds(194, 37, 106, 25); 
     frame.getContentPane().add(textFieldNum2); 
     textFieldNum2.setColumns(10); 

     JButton btnNewsButtonEnter = new JButton("Enter"); 
     btnNewsButtonEnter.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       final double num1; 
       final double num2; 
       try { 
        num1 = Double.parseDouble(textFieldNum1.getText()); 
        num2 =Double.parseDouble(textFieldNum2.getText()); 
        window.number1 = num1; 
        window.number2 = num2; 
        comboBoxNum.addActionListener(new ActionListener() { 

        if ((comboBoxNum.getSelectedItem()) == "Plus") { 
         totalres = window.calculateTotalPay()[0]; 
         itemselect ="Plus"; 
        } else if ((comboBoxNum.getSelectedItem()) == "Minus") { 
         totalres = window.calculateTotalPay()[1]; 
         itemselect ="Minus"; 
        } 
        if (itemselect == "Plus" || itemselect == "Minus"){ 
         textFieldTotRes.setText(Double.toString(totalres)); 
        } else { 
         JOptionPane.showMessageDialog(null, "Enter valid option"); 
        } 



       } catch (Exception ex) { 
        JOptionPane.showMessageDialog(null, "Enter valid number"); 
       } 
      } 
     }); 

     JButton btnNewButtonClear = new JButton("Clear"); 
     btnNewButtonClear.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       reset(); 
      } 

     }); 

     btnNewsButtonEnter.setBounds(20, 74, 84, 25); 
     frame.getContentPane().add(btnNewsButtonEnter); 
     btnNewButtonClear.setBounds(204, 74, 84, 25); 
     frame.getContentPane().add(btnNewButtonClear); 

     textFieldTotRes = new JTextField(); 
     textFieldTotRes.setBounds(198, 155, 200, 50); 
     frame.getContentPane().add(textFieldTotRes); 
     textFieldTotRes.setColumns(10); 

     lblNewTlabelTotNum = new JLabel("Result"); 
     lblNewTlabelTotNum.setFont(new Font("Garuda", Font.BOLD | Font.ITALIC, 14)); 
     lblNewTlabelTotNum.setBounds(29, 162, 106, 34); 
     frame.getContentPane().add(lblNewTlabelTotNum); 

     lblNewLabelNum1 = new JLabel("Enter 1st Number"); 
     lblNewLabelNum1.setBounds(10, 0, 106, 34); 
     frame.getContentPane().add(lblNewLabelNum1); 

     lblNewLabelNum2 = new JLabel("Enter 2nd Number"); 
     lblNewLabelNum2.setBounds(194, 0, 97, 40); 
     frame.getContentPane().add(lblNewLabelNum2); 

     comboBoxNum = new JComboBox<Object>(); 
     comboBoxNum.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       System.out.println(comboBoxNum.getSelectedItem()); 
      } 
     }); 
     comboBoxNum.setModel(new DefaultComboBoxModel<Object>(new String[] {"--------------", "Plus", "Minus"})); 
     comboBoxNum.setBounds(331, 37, 58, 40); 
     frame.getContentPane().add(comboBoxNum); 



    } 

    public void reset() { 
     textFieldNum1.setText(""); 
     textFieldNum2.setText(""); 
     textFieldTotRes.setText(""); 

    } 
} 
+0

"* nicht erreicht *" ist nicht aussagekräftig genug. Erhalten Sie irgendwelche Fehler? Ist die Ausgabe und/oder das Verhalten anders als erwartet? Irgendwelche anderen Details? –

Antwort

3
  • Sie nie berechnen Klasse instanziiert.
  • Sie benennen Ihr TestCalculate-Instanzfenster, beziehen sich dann jedoch auf Elementvariablen in Calculate (z. B. window.number1), die sich nicht in TestCalculate befinden.
  • Sie fügen innerhalb der actionPerformed-Methode für den btnNewsButtonEnter ActionListener comboBoxNum einen ActionListener hinzu. Verschieben Sie den verschachtelten ActionListener aus dieser Methode.
+0

Danke für Ihre freundliche Antwort und es löste mein Problem. :) – Paul85

Verwandte Themen