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