请教一个比较入门的有关问题

请教一个比较入门的问题以下是我写的一个用于股票计算的applet:importjava.awt.*importjava.awt.event.*

请教一个比较入门的问题
以下是我写的一个用于股票计算的applet:

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

public   class   Gupiaojisuan   extends   JApplet   implements   ActionListener
{
JLabel   mrjL,mrlL,sglL,mcjL,mclL,zcbL,zcglL,syL,pjcbL;
JTextField   mrjF,mrlF,sglF,mcjF,mclF,zcbF,zcglF,syF,pjcbF;
JButton   button1,button2;
double   mrj,mrl,sgl,mcj,mcl,zcb,zcgl,sy,pjcb;

public   void   init()
{
Container   container   =   getContentPane();
container.setLayout(new   FlowLayout());

mrjL   =   new   JLabel( "买入价 ");
container.add(mrjL);
mrjF   =   new   JTextField(10);
container.add(mrjF);

mrlL   =   new   JLabel( "买入量 ");
container.add(mrlL);
mrlF   =   new   JTextField(10);
container.add(mrlF);

sglL   =   new   JLabel( "送股量 ");
container.add(sglL);
sglF   =   new   JTextField(10);
container.add(sglF);

mcjL   =   new   JLabel( "卖出价 ");
container.add(mcjL);
mcjF   =   new   JTextField(10);
container.add(mcjF);

mclL   =   new   JLabel( "卖出量 ");
container.add(mclL);
mclF   =   new   JTextField(10);
container.add(mclF);

zcbL   =   new   JLabel( "总成本 ");
container.add(zcbL);
zcbF   =   new   JTextField(10);
zcbF.setEditable(false);
container.add(zcbF);

zcglL   =   new   JLabel( "总持股量 ");
container.add(zcglL);
zcglF   =   new   JTextField(10);
zcglF.setEditable(false);
container.add(zcglF);

syL   =   new   JLabel( "收益 ");
container.add(syL);
syF   =   new   JTextField(10);
syF.setEditable(false);
container.add(syF);

pjcbL   =   new   JLabel( "平价成本 ");
container.add(pjcbL);
pjcbF   =   new   JTextField(10);
pjcbF.setEditable(false);
container.add(pjcbF);

button1   =   new   JButton( "计算 ");
button1.addActionListener(this);
container.add(button1);


}

public   void   actionPerformed(ActionEvent   e)
{
mrj   =   Double.parseDouble(mrjF.getText());
mrl   =   Double.parseDouble(mrlF.getText());
mcj   =   Double.parseDouble(mcjF.getText());
mcl   =   Double.parseDouble(mclF.getText());
sgl   =   Double.parseDouble(sglF.getText());

zcb   =   mrj   *   mrl   *   1.004;
zcgl   =   mrl   +   mrl   /   10   *   sgl;
pjcb   =   zcb   /   zcgl;
sy   =   mcj   *   mcl   *   0.994;


zcglF.setText(Double.toString(zcgl));
zcbF.setText(Double.toString(zcb));
zcglF.setText(Double.toString(zcgl));
pjcbF.setText(Double.toString(pjcb));
syF.setText(Double.toString(sy));
}
}


我想请教以下如何实现如下功能:
  在输入完“买入价”、“买入量”、“送股量”之后,自动的显示出“总成本”、“总持股量”以及“平均成本”的数值,再点击“计算”按钮后,显示出“收益”的数值。

初学者,程序可能写的非常乱,非常难看,请见谅……

[解决办法]
是否是在输入“送股量”之后按回车,然后自动计算出结果,然后显示出“总成本”、“总持股量”以及“平均成本”的数值?如果是这样的话,那么在表示“送股量”的JTextFild中添加接收回车的事件addActionListener(),在它的事件处理函数中,设置“总成本”、“总持股量”以及“平均成本”对应的组件的文本就可以了。



在“计算”按钮中也添加事件处理来计算“收益”。

可以看一下这个程序,对你也许有帮助:
http://www.it315.org/soucecode/java11.htm
[解决办法]
帮你改了一下,限制输入数字
package gui;

import java.awt.*;
import java.awt.event.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class Gupiaojisuan extends JApplet implements ActionListener {
JLabel mrjL, mrlL, sglL, mcjL, mclL, zcbL, zcglL, syL, pjcbL;

JTextField mrjF, mrlF, sglF, mcjF, mclF, zcbF, zcglF, syF, pjcbF;

JButton button1, button2;

double mrj, mrl, sgl, mcj, mcl, zcb, zcgl, sy, pjcb;

public void init() {
Container container = getContentPane();
container.setLayout(new FlowLayout());

mrjL = new JLabel( "买入价 ");
container.add(mrjL);
mrjF = new JTextField(10);
mrjF.setDocument(new OnlyDigit(mrjF));
container.add(mrjF);

mrlL = new JLabel( "买入量 ");
container.add(mrlL);
mrlF = new JTextField(10);
mrlF.setDocument(new OnlyDigit(mrlF));
container.add(mrlF);

sglL = new JLabel( "送股量 ");
container.add(sglL);
sglF = new JTextField(10);
sglF.setDocument(new OnlyDigit(sglF));
container.add(sglF);

mcjL = new JLabel( "卖出价 ");
container.add(mcjL);
mcjF = new JTextField(10);
mcjF.setDocument(new OnlyDigit(mcjF));
container.add(mcjF);

mclL = new JLabel( "卖出量 ");
container.add(mclL);
mclF = new JTextField(10);
mclF.setDocument(new OnlyDigit(mclF));
container.add(mclF);

zcbL = new JLabel( "总成本 ");
container.add(zcbL);
zcbF = new JTextField(10);
zcbF.setEditable(false);
container.add(zcbF);

zcglL = new JLabel( "总持股量 ");
container.add(zcglL);
zcglF = new JTextField(10);
zcglF.setEditable(false);
container.add(zcglF);

syL = new JLabel( "收益 ");
container.add(syL);
syF = new JTextField(10);
syF.setEditable(false);
container.add(syF);

pjcbL = new JLabel( "平价成本 ");
container.add(pjcbL);
pjcbF = new JTextField(10);
pjcbF.setEditable(false);
container.add(pjcbF);

button1 = new JButton( "计算 ");
button1.addActionListener(this);
container.add(button1);

}

public void actionPerformed(ActionEvent e) {
/*mrj = Double.parseDouble(mrjF.getText());
mrl = Double.parseDouble(mrlF.getText());
mcj = Double.parseDouble(mcjF.getText());
mcl = Double.parseDouble(mclF.getText());
sgl = Double.parseDouble(sglF.getText());

zcb = mrj * mrl * 1.004;
zcgl = mrl + mrl / 10 * sgl;
pjcb = zcb / zcgl;
sy = mcj * mcl * 0.994;

zcglF.setText(Double.toString(zcgl));
zcbF.setText(Double.toString(zcb));
zcglF.setText(Double.toString(zcgl));
pjcbF.setText(Double.toString(pjcb));*/
syF.setText(Double.toString(sy));
}

private void tryCalculate(){
String str;
boolean all=true;
if(!(str=mrjF.getText().trim()).equals( " ")){
mrj = Double.parseDouble(str);
}
else
all = false;

if(!(str=mrlF.getText().trim()).equals( " ")){
mrl = Double.parseDouble(str);
}
else
all=false;

if(!(str=mcjF.getText().trim()).equals( " ")){


mcj = Double.parseDouble(str);
}
else
all = false;

if(!(str=mclF.getText().trim()).equals( " ")){
mcl = Double.parseDouble(str);
}
else
all = false;

if(!(str=sglF.getText().trim()).equals( " ")){
sgl = Double.parseDouble(str);
}
else
all = false;

if(all){
zcb = mrj * mrl * 1.004;
zcgl = mrl + mrl / 10 * sgl;
pjcb = zcb / zcgl;
sy = mcj * mcl * 0.994;

zcglF.setText(Double.toString(zcgl));
zcbF.setText(Double.toString(zcb));
zcglF.setText(Double.toString(zcgl));
pjcbF.setText(Double.toString(pjcb));
//syF.setText(Double.toString(sy));
}
else{
zcglF.setText( " ");
zcbF.setText( " ");
zcglF.setText( " ");
pjcbF.setText( " ");
syF.setText( " ");
}
}

/**
* this class is used to restrict the input, it makes sure that
* the text of the text field is a digit string.that is, 'a ', 'Z ',
* '_ ', '$ 'and so on are all forbidden.
* @author feng
*
*/
private class OnlyDigit extends PlainDocument{
private JTextField f;

public OnlyDigit(JTextField f){
this.f = f;
}
public void insertString(int offset,
String str,
AttributeSet attSet)
throws BadLocationException{
StringBuffer tmp = new StringBuffer(f.getText());
tmp.insert(offset,str);
Pattern p = Pattern.compile( "^-?\\d*(\\.)?\\d*$ ");
Matcher m = p.matcher(tmp.toString());
if(m.matches()){
super.insertString(offset,str,attSet);
tryCalculate();
}
}
}
}

[解决办法]
其实楼主都做得差不多了,只需要
买入价 买入量 送股量 这几个JTextField增加一个监听就好了, 我对你的程序不需要的只是注释了一下.增加了一点点代码.

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

public class Gupiaojisuan extends JApplet //implements ActionListener
{
JLabel mrjL,mrlL,sglL,mcjL,mclL,zcbL,zcglL,syL,pjcbL;
JTextField mrjF,mrlF,sglF,mcjF,mclF,zcbF,zcglF,syF,pjcbF;
JButton button1,button2;
double mrj,mrl,sgl,mcj,mcl,zcb,zcgl,sy,pjcb;

public void init()
{
Container container = getContentPane();
container.setLayout(new FlowLayout());

mrjL = new JLabel( "买入价 ");
container.add(mrjL);
mrjF = new JTextField(10);
container.add(mrjF);


mrlL = new JLabel( "买入量 ");
container.add(mrlL);
mrlF = new JTextField(10);
container.add(mrlF);


sglL = new JLabel( "送股量 ");
container.add(sglL);
sglF = new JTextField(10);
container.add(sglF);


mcjL = new JLabel( "卖出价 ");
container.add(mcjL);
mcjF = new JTextField(10);
container.add(mcjF);


mclL = new JLabel( "卖出量 ");
container.add(mclL);
mclF = new JTextField(10);
container.add(mclF);


zcbL = new JLabel( "总成本 ");
container.add(zcbL);
zcbF = new JTextField(10);
zcbF.setEditable(false);
container.add(zcbF);


zcglL = new JLabel( "总持股量 ");
container.add(zcglL);
zcglF = new JTextField(10);
zcglF.setEditable(false);
container.add(zcglF);



syL = new JLabel( "收益 ");
container.add(syL);
syF = new JTextField(10);
syF.setEditable(false);
container.add(syF);

pjcbL = new JLabel( "平价成本 ");
container.add(pjcbL);
pjcbF = new JTextField(10);
pjcbF.setEditable(false);
container.add(pjcbF);

button1 = new JButton( "计算 ");
//button1.addActionListener(this);

container.add(button1);

//注册事件
ComputeListener computeListener = new ComputeListener();
button1.addActionListener(computeListener);
mrjF.addActionListener(computeListener);
mrlF.addActionListener(computeListener);
sglF.addActionListener(computeListener);
mcjF.addActionListener(computeListener);
mclF.addActionListener(computeListener);

}

//public void actionPerformed(ActionEvent e)
class ComputeListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{

//这里如果转换为double形不成功的话,会抛出异常
//这种方法处理很死,不过还是可以用的
try
{
mrj = Double.parseDouble(mrjF.getText());
}
catch(Exception ex)
{
mrj = 0;
}
try
{
mrl = Double.parseDouble(mrlF.getText());
}
catch(Exception ex)
{
mrl = 0;
}
try
{
mcj = Double.parseDouble(mcjF.getText());
}
catch(Exception ex)
{
mcj = 0;
}
try
{
mcl = Double.parseDouble(mclF.getText());
}
catch(Exception ex)
{
mcl = 0;
}
try
{
sgl = Double.parseDouble(sglF.getText());
}
catch(Exception ex)
{
sgl = 0;
}




zcb = mrj * mrl * 1.004;
zcgl = mrl + mrl / 10 * sgl;
pjcb = zcb / zcgl;
sy = mcj * mcl * 0.994;


zcglF.setText(Double.toString(zcgl));
zcbF.setText(Double.toString(zcb));
zcglF.setText(Double.toString(zcgl));
pjcbF.setText(Double.toString(pjcb));
syF.setText(Double.toString(sy));
}
}
}