2016-09-17 3 views
3

Я новичок в java, я просто хочу сделать простой JFrame, который принимает два числа в качестве ввода через JtextFields, суммирует их и возвращает ответ через JLabel ... но он просто не делает это то, что это, предполагают, чтобы сделать, вот мой код:Отображение суммы через 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); 


    } 

} 

он компилирует Хорошо, но не показывает сумму через JLabel, когда я ставлю некоторые intergers через TextFields ... Я с этой проблемой в течение недели и попытался разные вещи, которые я знаю до сих пор, но проблема не устранена ...

+1

'int sum = num1 + num2;' Этот кусок кода будет выполняться «немедленно» и только один раз, а 'num1' и' num2' по-прежнему '0'. Сумма всегда должна быть пересчитана в методах 'actionPerformed', а также в тексте метки суммы. –

+1

Подсказка: узнайте о соглашениях об именах java. Названия классов - UpperCase; всегда. И избегайте использования «сокращений» в ваших именах, даже «AddingNumbersFrame» или что-то в этом роде будет более информативным, чем «gUI». – GhostCat

ответ

0

Посмотрите на приведенный ниже код (включая комментарии):

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

Thank You Very Much GoXR3Plus! все вы, люди, очень полезны ... Я действительно ценю это ... это очень помогло ..... –

+0

@Waleed Sagher :) После использования Swing вы должны перейти на JavaFX. – GOXR3PLUS

0

Вы не должны размещать слушатели действий на своих текстовых полях (ну, конечно, вы можете; но есть и другие варианты).

Вы можете добавить кнопку в рамку, возможно, с текстом «добавить». И всякий раз, когда эта кнопка нажата, вы извлекаете два значения, добавляете их; и вставьте их в это третье текстовое поле.

На данный момент ваш код вычисляет сумму 0 + 0 только один раз; в то время как ваш конструктор вызывается. Вместо этого вы должны убедиться, что это вычисление произойдет «позже» - когда пользователь попросит, чтобы это произошло!

Но для записи: если вы поместите тот же самый экстренный прослушиватель в свои текстовые поля, это тоже сработает. Если это действие слушатель просто выбирает как этикетки, добавляет их, и помещает сумму в число поля 3.

+0

Спасибо вам большое! –

+1

Добро пожаловать. Возможно, вы захотите проверить обновления, которые я сделал для своего ответа. И, конечно же, не забудьте принять тот ответ, который, по вашему мнению, помог больше всего. – GhostCat

0

Вы создали JLabel и выставиться свое первоначальное значение 0 (потому что изначально как num1 & num2 равны 0). Вам нужно обновить JLabel (пересчитать & отображение текущей суммы в действии, выполненном методом).

E.g.

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

и вызвать его в действии слушателя TextField 1

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

     } 
     }); 

и TextField 2

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

Большое спасибо! с помощью вас, ребята, я надеюсь, что научусь быстро .... спасибо еще раз! –

+0

Рад, что это помогает :). Помните, что вы всегда можете найти ответы, которые вы найдете полезными. – sol4me

Смежные вопросы