以下是我写的一个用于股票计算的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));
}
} 我想请教以下如何实现如下功能:
  在输入完“买入价”、“买入量”、“送股量”之后,自动的显示出“总成本”、“总持股量”以及“平均成本”的数值,再点击“计算”按钮后,显示出“收益”的数值。初学者,程序可能写的非常乱,非常难看,请见谅……

解决方案 »

  1.   

    是否是在输入“送股量”之后按回车,然后自动计算出结果,然后显示出“总成本”、“总持股量”以及“平均成本”的数值?如果是这样的话,那么在表示“送股量”的JTextFild中添加接收回车的事件addActionListener(),在它的事件处理函数中,设置“总成本”、“总持股量”以及“平均成本”对应的组件的文本就可以了。在“计算”按钮中也添加事件处理来计算“收益”。可以看一下这个程序,对你也许有帮助:
    http://www.it315.org/soucecode/java11.htm
      

  2.   

    帮你改了一下,限制输入数字
    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();
                }
            }
        }
    }
      

  3.   

    谢谢believefym(feng),但是您还是没有解决我的问题,就如jorneyR所说的,我希望达到的效果是:
    多次的“回车”事件响应,就是说,当输入完“买入价”、“买入量”以及“送股量”后,按回车,先计算并
    显示出总成本、总持股量以及平均成本、当输入完“卖出价”、“卖出量”后,在计算出“收益”等……
      

  4.   

    呵呵……不好意思啊!feng!我没有仔细读您写的代码!It Works Good!现在有一个新的问题请教,你的代码是输入前面五个数字之后,自动计算和显示出“总成本”、“平均成本”、“总持股量”,点“计算”按钮后,计算出“收益”。我希望当输入“买入价”、“买入量”、“送股量”后,计算出“总成本”、“平均成本”、“总持股量”,再输入”卖出价“和”卖出量“后,自动的计算和显示出”收益“,不用按钮了。这样的话,就把您写的private void tryCalculate()分成了两个步骤,如果是这样的话,应该怎么写?可否麻烦您写出完整的代码(因为如果您只是告诉我方法的话,我有可能还是写不出来),方便一下我这个初学者,不胜感激!
      

  5.   

    其实楼主都做得差不多了,只需要
    买入价 买入量 送股量 这几个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));
    }
    }
    }
      

  6.   

    谢谢jorneyR、believefym以及Supernpc的热情帮助……