如何在java中事件后更新帧?

时间:2015-10-20 13:51:41

标签: java swing applet

背景:我是Java的新手。

我正在尝试构建一个有4个框架的小applet,一个向用户询问两个数字,然后是三个不同的框架,(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();
 }
     }

2 个答案:

答案 0 :(得分:4)

  

我正在尝试构建一个小applet

它不是“applet”。您正在构建和应用。不要将您的类称为“Applet”,因为该名称的AWT类令人困惑。为您的课程提供更好的描述性名称

  

有4帧,

你有1个JFrame。 JTabbedPane中有4个选项卡。

  

用户点击“计算”按钮后,我可以获取所需变量(i,j)中的值

因为您在这些变量上使用了getText()方法。

  

但我不知道在按下“计算按钮”后其他帧如何显示更新的值。

使用上面的“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.

请注意,如果标签字符串的大小发生变化,您可能需要重新验证标签的父级。