[Java GUI] 从JTextArea中解析数字并求和

从输入文本中自动解析各数字,并求和。单击save按钮,可将结果写入文件。

这里使用了嵌套布局方式设计界面。

import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;

class CalcFrame extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = -1854831316194433442L;

	JTextArea txtNums = null;
	JTextField txtRes = null;
	JButton btnCalc = null;
	JButton btnSave = null;
	
	CalcFrame( String title ) {
		super( title );
		
		Container cp = getContentPane();
		cp.setLayout( new BorderLayout() );
		
		JPanel txtPanel = new JPanel();
		txtPanel.setLayout( new BorderLayout() );
		
		txtNums = new JTextArea( 5, 20 );
		txtRes = new JTextField();
		txtRes.setText( "SUM = " );
		txtRes.setEditable( false );
		
		btnCalc = new JButton( "SUM" );
		btnSave = new JButton( "Save" );
		btnCalc.addActionListener( this );
		btnSave.addActionListener( this );
		
		JPanel btnPanel = new JPanel();
		btnPanel.add( btnCalc );
		btnPanel.add( btnSave );
		
		JScrollPane sp = new JScrollPane( txtNums );
		txtPanel.add( sp, BorderLayout.CENTER );
		txtPanel.add( txtRes, BorderLayout.SOUTH );
		
		cp.add( txtPanel, BorderLayout.CENTER );
		cp.add( btnPanel, BorderLayout.SOUTH );
		
		setSize( 300, 200 );
		setLocation( 400, 300 );
		setVisible( true );
		pack();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if( e.getSource() == btnCalc ) {
			try {
				StringTokenizer tokenizer = new StringTokenizer( txtNums.getText() );
				int n = tokenizer.countTokens();
				int sum = 0;
				for( int i = 0; i < n; ++i ) {
					sum += Integer.parseInt( tokenizer.nextToken() );
				}
				txtRes.setText( "SUM = " + sum );
			}
			catch( NumberFormatException ex ) {
				System.out.println( "Type Error! " + ex );
			}
			catch( Exception e1 ) {
				System.out.println( e1 );
			}
		}
		else if( e.getSource() == btnSave ) {
			JFileChooser saveDlg = new JFileChooser();
			saveDlg.setDialogTitle( "Save File" );
			int res = saveDlg.showSaveDialog( this );
			if( res == JFileChooser.APPROVE_OPTION ) {
				File file = saveDlg.getSelectedFile();
				try {
					BufferedWriter writer = new BufferedWriter( new FileWriter( file ) );
					writer.write( txtRes.getText() );
					writer.close();
				}
				catch( FileNotFoundException ex ) {
					System.out.println( ex );
				}
				catch( IOException e1 ) {
					System.out.println( e1 );
				}
			}
		}
	}
}

public class CalcSumDemo {
	public static void main( String [] args ) {
		new CalcFrame( "Calculate SUM" );
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值