2016-09-17 1 views
3

Ich bin ein Neuling zu Java, ich möchte nur einen einfachen JFrame machen, der zwei Zahlen als Eingabe über JtextFields nimmt, summiere sie und gebe die Antwort über JLabel zurück ... aber es geht einfach nicht es, was es zu tun annehmen, hier ist mein Code:Zeige Summe durch JLabel

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ComponentEvent; 
import java.awt.event.ComponentListener; 
import java.util.*; 
public class gUi extends JFrame { 
    private JLabel lbl; 
    private JLabel lbl2; 
    private JLabel lbl3; 
    private JTextField tb; 
    private JTextField tb1; 
    private int num1; 
    private int num2; 
     public gUi(){ 
     super("Sum Dialog"); 
     setLayout(new FlowLayout()); 
     lbl = new JLabel("1st Number:"); 
     add(lbl); 
     tb = new JTextField(15); 
     add(tb); 
     tb.addActionListener(new ActionListener() 
     { 
     public void actionPerformed(ActionEvent event){ 
     num1 = Integer.parseInt(tb.getText()); 
     } 
     }); 
     lbl2 = new JLabel("2nd Number"); 
     add(lbl2); 
     tb1= new JTextField(15); 
     tb1.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent event){ 
       num2= Integer.parseInt(tb1.getText()); 
      } 
     }); 

     add(tb1); 
     int sum= num1+num2; 
     String ssum = Integer.toString(sum); 
     lbl3 = new JLabel(); 
     lbl3.setText(ssum); 
     add(lbl3);  
    } 
    } 

import java.awt.*; 
import javax.swing.*; 
public class Main { 

    public static void main(String[] args) { 
     gUi g =new gUi(); 
     g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     g.setVisible(true); 
     g.setSize(180, 160); 


    } 

} 

es Compiliert in Ordnung, aber nicht Summe durch JLabel zeigt, wenn ich einige intergers setzen durch Textfelder ... ich für eine Woche, dieses Problem habe und versucht, verschiedene Dinge, die ich bisher kenne, aber das Problem besteht weiterhin ...

+1

'int sum = num1 + num2;' Dieser Codecode wird "sofort" und nur einmal ausgeführt, und "num1" und "num2" sind immer noch "0". Die Summe muss sowohl in Ihrer actionPerformed-Methode als auch im Text der Summenbeschriftung neu berechnet werden. –

+1

Hinweis: Informieren Sie sich über Java-Namenskonventionen. Klassennamen werden UpperCase; immer. Und vermeiden Sie "Abkürzungen" in Ihren Namen, selbst "AddingNumbersFrame" oder etwas ähnliches wäre aussagekräftiger als "gUI". – GhostCat

Antwort

0

Werfen Sie einen Blick auf den Code unten (inklusive Kommentare):

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

/** 
* Shows a Stage that has two text Fields 
* 
*/ 
@SuppressWarnings("serial") 
public class UserInterface extends JFrame { 

    private JLabel label1; 
    private JLabel label2; 
    private JLabel label3; 
    private JTextField textField1; 
    private JTextField textField2; 

    /** 
    * Constructor 
    */ 
    public UserInterface() { 
     super("Sum Dialog"); 

     // Layout 
     setLayout(new FlowLayout()); 

     // 1st JLabel 
     label1 = new JLabel("1st Number:"); 
     add(label1); 
     textField1 = new JTextField(15); 
     add(textField1); 

     // 2 second JLabel 
     label2 = new JLabel("2nd Number"); 
     add(label2); 
     textField2 = new JTextField(15); 
     add(textField2); 

     // 3 third label 
     label3 = new JLabel(); 
     label3.setSize(200, 30); 
     add(label3); 

     JButton button = new JButton("Calculate"); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       // calculate the sum when the Button is pressed 
       int sum = Integer.parseInt(textField2.getText()) + Integer.parseInt(textField2.getText()); 
       label3.setText(Integer.toString(sum)); 
      } 
     }); 
     add(button); 

    } 

    /** 
    * Main method of the application 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
     UserInterface main = new UserInterface(); 
     main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     main.setVisible(true); 
     main.setSize(180, 160); 

    } 

} 
+0

Vielen Dank GoXR3Plus! alle von euch Menschen sind sehr hilfreich ... Ich schätze es wirklich ... es hat mir sehr geholfen ..... –

+0

@Waleed Sagher :) Nach der Verwendung von Swing sollten Sie JavaFX weitergeben. – GOXR3PLUS

0

Sie sollten keine Action-Listener auf Ihre Textfelder setzen (Nun, natürlich können Sie; aber es gibt andere Möglichkeiten hier).

Sie könnten Ihrem Rahmen eine Schaltfläche hinzufügen, vielleicht mit dem Text "add". Und wenn diese Schaltfläche geklickt ist, holen Sie die zwei Werte, fügen Sie sie hinzu; und dränge sie in das dritte Textfeld.

Ab sofort berechnet Ihr Code die Summe von 0 + 0 nur einmal; während Ihr Konstruktor aufgerufen wird. Stattdessen müssen Sie sicherstellen, dass diese Berechnung "später" geschieht - wenn der Benutzer danach fragt!

Aber für den Rekord: Wenn Sie die gleichen Aktion Listener auf Ihre Textfelder setzen, würde das auch funktionieren. Wenn diese Aktion Hörer beide Etiketten einfach holt, fügt sie und legt die Summe in Feldnummer 3.

+0

Vielen Dank! –

+1

Sie sind herzlich willkommen. Vielleicht möchten Sie nach den Updates suchen, die ich an meiner Antwort vorgenommen habe. Und natürlich: Vergiss nicht, die Antwort zu akzeptieren, von der du denkst, dass sie dir am meisten geholfen hat. – GhostCat

0

Sie erstellt haben eine JLabel und gefassten seinen Anfangswert auf 0 (weil zunächst beide num1 & num2 0 sind). Was Sie brauchen, ist das Aktualisieren der JLabel (Neuberechnung & Anzeige der aktuellen Summe in Aktion ausgeführte Methode).

z.

private void updateSum() { 
    lbl3.setText(String.valueOf(num1+num2)); 
} 

Und rufen Sie es in Aktion Hörer von Textfeld 1

tb.addActionListener(new ActionListener() 
     { 
     public void actionPerformed(ActionEvent event){ 
     num1 = Integer.parseInt(tb.getText()); 
      updateSum(); 

     } 
     }); 

und Textfeld 2

tb1.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent event){ 
       num2= Integer.parseInt(tb1.getText()); 
       updateSum(); 
      } 
     }); 
+0

Vielen Dank Sir! mit der Hilfe von euch hoffe ich, dass ich schnell lernen werde .... danke nochmal! –

+0

Froh, dass es hilft :). Denken Sie daran, Sie können immer die Antworten aufwerten, die Sie nützlich finden – sol4me