java编写一个具有如下布局的应用程序,要求当在上面的文本区中输入若干数时,下面的文本框同时对输入的数进行求和运算并求出平均数。即随着输入的变化,文本框不断更新求和及平均值。结果图省略
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class test2_2 {
double n=0;//和值
int m=1;//数值个数
int j=0;//数值位数
int q[]=new int[100];//存放输入的数
public test2_2()//构造方法
{
JFrame f=new JFrame();
f.setTitle("和与平均值");//设置标题
f.setBounds(300, 300, 500,300);//设置大小位置
f.setResizable(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭
f.setVisible(true);//可见
Container c=f.getContentPane();//获取容器
c.setLayout(new GridBagLayout());//设置网格组布局
//文本输入框
GridBagConstraints grid1=new GridBagConstraints();
grid1.insets=new Insets(0, 0, 6, 0);
grid1.anchor=GridBagConstraints.NORTH;
grid1.gridx=0;grid1.gridy=0;
JPanel p1=new JPanel(new GridBagLayout());//面板设置
p1.setPreferredSize(new Dimension(420, 100));//大小
JLabel L1=new JLabel(" 请输入任意数以空格分开,结束");//提示标签
GridBagConstraints bL1=new GridBagConstraints();
bL1.gridx=0;bL1.gridy=0;
JTextArea textarea1=new JTextArea("",4,37);//文本输入域
GridBagConstraints btextarea1=new GridBagConstraints();
btextarea1.gridx=0;btextarea1.gridy=1;
JScrollPane s=new JScrollPane(textarea1);
p1.add(L1,bL1);
p1.add(s,btextarea1);
//自动输出框
GridBagConstraints grid2=new GridBagConstraints();
grid2.insets=new Insets(0, 0, 5, 0);
grid2.anchor=GridBagConstraints.CENTER;
grid2.gridx=0;grid2.gridy=1;
JPanel p2=new JPanel(new GridBagLayout());//面板设置
p2.setPreferredSize(new Dimension(450, 90));//面板大小
GridBagConstraints gridb1=new GridBagConstraints();//和值,平均值输出框
gridb1.gridx=0;gridb1.gridy=0;
GridBagConstraints gridb2=new GridBagConstraints();
gridb2.gridx=1;gridb2.gridy=0;gridb2.ipadx=300;
GridBagConstraints gridb3=new GridBagConstraints();
gridb3.gridx=0;gridb3.gridy=1;
GridBagConstraints gridb4=new GridBagConstraints();
gridb4.gridx=1;gridb4.gridy=1;gridb4.ipadx=300;
JLabel L2=new JLabel("和值 ");
JTextField textfield1=new JTextField(100);
textfield1.setEditable(false);
JLabel L3=new JLabel("平均值 ");
JTextField textfield2=new JTextField(100);
textfield2.setEditable(false);
JButton button=new JButton("按钮输出结果");//按钮界面
GridBagConstraints gridb5=new GridBagConstraints();
gridb5.insets=new Insets(8, 0, 0, 0);
gridb5.gridx=0;gridb5.gridy=3;gridb5.gridwidth=2;
p2.add(L2,gridb1);
p2.add(textfield1,gridb2);
p2.add(L3,gridb3);
p2.add(textfield2,gridb4);
p2.add(button,gridb5);
try {//文本域内容处理
textarea1.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
String strings=textarea1.getText();//获取文本域
try {
if(strings.length()!=0)
{
n=m=0;//复原
String number[]=strings.split("\\s+");//以空格分离
for(int l=0;l<number.length;l++)
{
m++;
n=n+Integer.valueOf(number[l]);
}
}
else
{
n=0;//复原
m=1;
}
} catch (NumberFormatException e1) {
e1.printStackTrace();
}
try {//格式验证
int i=e.getKeyChar()-48;//提取正确的格式
if((0<=i&&i<=9)||i==-16||i==-40)//空格32,删除键8()
{
textfield1.setText(String.format("%.2f",n));
textfield2.setText(String.format("%.2f",n/m));
}
else//输入格式错误
{
JDialog errordialog=new JDialog(f, "警告!", true);
errordialog.setSize(130, 100);
errordialog.setLocationRelativeTo(f);
JLabel errorlabel=new JLabel("输入格式错误!");
errordialog.add(errorlabel);
errordialog.setVisible(true);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
} catch (Exception e2) {
e2.printStackTrace();
}
//按钮事件处理
try {
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog dialog=new JDialog(f, "结果显示",true);
dialog.setSize(400, 160);
Container cd=dialog.getContentPane();
JPanel p3=new JPanel(new GridBagLayout());//面板设置
p3.setPreferredSize(new Dimension(380, 150));//面板大小
GridBagConstraints Grid1=new GridBagConstraints();//和值,平均值输出框
Grid1.gridx=0;Grid1.gridy=0;
GridBagConstraints Grid2=new GridBagConstraints();
Grid2.gridx=1;Grid2.gridy=0;Grid2.ipadx=300;
GridBagConstraints Grid3=new GridBagConstraints();
Grid3.gridx=0;Grid3.gridy=1;
GridBagConstraints Grid4=new GridBagConstraints();
Grid4.gridx=1;Grid4.gridy=1;Grid4.ipadx=300;
JLabel L4=new JLabel("和值 ");
JTextField text1=new JTextField(100);
text1.setEditable(false);
JLabel L5=new JLabel("平均值 ");
JTextField text2=new JTextField(100);
text2.setEditable(false);
p3.add(L4,Grid1);
p3.add(text1,Grid2);
p3.add(L5,Grid3);
p3.add(text2,Grid4);
cd.add(p3);
try {
text1.setText(String.format("%.2f",n));
text2.setText(String.format("%.2f",n/m));;
} catch (Exception e1) {
e1.printStackTrace();
}
dialog.setLocationRelativeTo(f);;
dialog.setVisible(true);
}
});
} catch (Exception e1) {
e1.printStackTrace();
}
c.add(p1,grid1);
c.add(p2,grid2);
f.setVisible(true);//可见
}
public static void main(String[] args) {
try {
new test2_2();//创建对象,通过构造函数直接实现功能
} catch (Exception e) {
e.printStackTrace();
}
}
}