背景:我是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();
}
}
答案 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.
请注意,如果标签字符串的大小发生变化,您可能需要重新验证标签的父级。