2015-10-20 2 views
1

Фон: Я полный новичок на Java.Как обновить кадры после события в java?

Я пытаюсь создать небольшой апплет, который имеет 4 кадра, один, чтобы спросить пользователя для двух чисел, а затем трех разных кадров, (1) показать сумму, (2) показать разницу и (3) показать произведение чисел. После того, как пользователь нажимает кнопку «Рассчитать», я могу получить значения внутри необходимых переменных (i, j) Я показываю в других фреймах, но я не знаю, как другие фреймы отображают обновленные значения после «кнопки расчета», нажата. Вместо этого в моем текущем коде они продолжают показывать значение по умолчанию.

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

public class Applet extends JFrame implements ActionListener 
{ 

JTextField txtdata,txdatas; 
    JButton calbtn = new JButton("Calculate"); 
    String c,d; 
    int i=0,j=0; 
public Applet() { 

    JTabbedPane tabbedPane = new JTabbedPane(); 
    JPanel tabonepanel = new JPanel(); 
    JPanel tabtwopanel = new JPanel(); 
    JPanel tabtthreepanel = new JPanel(); 
    JPanel tabfourpanel = new JPanel(); 
    JLabel sumlabel = new JLabel ("The Sum is "+(i+j)); 


    tabonepanel.add(sumlabel); 
    tabtwopanel.add(new JLabel("The Difference is "+ (i-j))); 
    tabtthreepanel.add(new JLabel("The Product is "+ (i*j))); 
    tabfourpanel.add(new JLabel("Enter two numbers")); 
    txtdata= new JTextField(); 
    txdatas=new JTextField(); 
    tabfourpanel.add(txtdata); 
    tabfourpanel.add(txdatas); 
    tabfourpanel.add(calbtn); 
    calbtn.addActionListener(this); 

    tabbedPane.addTab("Enter",tabfourpanel); 
    tabbedPane.addTab("Sum",tabonepanel); 
    tabbedPane.addTab("Dif",tabtwopanel); 
    tabbedPane.addTab("Mul",tabtthreepanel); 

    this.getContentPane().add(tabbedPane); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setTitle("Tabbed Frames Demo"); 
    this.setVisible(true); 
    this.setSize(300,450); 

} 

    public void actionPerformed(ActionEvent e) 
{ 
    if (e.getSource() == calbtn) { 
     c = txtdata.getText() ; 
     d = txdatas.getText() ; 
     i = Integer.parseInt(c); 
     j = Integer.parseInt(c); 




    } 

} 
    public static void main(String[] args) 
{ 
    Applet x = new Applet(); 
} 
    } 

ответ

4

Я пытаюсь построить небольшой апплет

Это не «апплет». Вы строите и применяете. Не называйте свой класс «Апплет», потому что это класс AWT, который вводит в заблуждение. Дай вам класс лучшего описательное имя

, который имеет 4 кадра,

У вас есть 1 JFrame. У вас есть 4 вкладки в JTabbedPane.

После пользователь нажимает на кнопку «Рассчитать» Я могу получить значения в необходимых переменных (I, J)

Поскольку вы используете метод getText() на тех varaibles.

но я не знаю, как будут отображаться обновленные значения других кадров после нажатия кнопки «рассчитать».

Вы используете метод «getter» выше, чтобы получить значения. Таким образом, вы можете использовать метод setter для установки текста компонента при изменении значения.

JLabel sumlabel = new JLabel ("The Sum is "+(i+j)); 

выше этикетки (и любой другой ярлык вы хотите изменить текст на) должны быть определены в качестве переменной экземпляра в классе так же, как определить текстовые поля (txtdata и txdatas), как, например переменные.

tabtwopanel.add(new JLabel("The Difference is "+ (i-j))); 
tabtthreepanel.add(new JLabel("The Product is "+ (i*j))); 

Они также должны быть переменными экземпляра. Текст не изменяется, так как изменяется значение i, j. Вам нужно вручную сбросить текст каждый раз, когда вы выполняете расчет.

+1

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

3

enter code here Ваша сумма, этикетки разница, и продукт должен быть объявлен как переменные экземпляра:

JTextField txtdata,txdatas; 
JButton calbtn = new JButton("Calculate"); 
JLabel sumLabel; 
JLabel differenceLabel; 
JLabel productLabel; 
String c,d; 
int i=0,j=0; 

Затем создать их в конструкторе:

sumLabel = new JLabel("The Sum is "+(i+j)); 
differenceLabel = new JLabel("The Difference is "+(i-j)); 
productLabel = new JLabel("The Product is "+(i*j)); 

Затем в actionPerformed метод, изменить текст на этикетке:

sumLabel.setText("("The Sum is "+(i+j)); 
    //etc. 

Обратите внимание, что вам может потребоваться повторная проверка родительского элемента этикеток, если изменяется размер строки ярлыка.

+0

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