1.实验目的
(1)掌握图形用户界面基本组件。
(2)了解如何使用布局管理器对组件进行管理。
(3)掌握Java事件处理机制。
2.实验内容
实验题1
编写一个模拟计算器的程序,使用面板和网格布局,添加一个文本框,10个数字按钮(0-9),4个加减乘除按钮,一个等号按钮,一个清除按钮,要求将计算公式和结果显示在文本框中。
[基本要求] 编写完整程序
package bag01;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class Calculator extends JFrame{
public
static int fun(String s)
{
int tmp=0,i=0,result=0;
while(i='0'&&s.charAt(i)<='9')
{
tmp=tmp*10+s.charAt(i)-'0';
i++;
}
result=tmp;
for( ;i
{
char exp=s.charAt(i);
i++;
tmp=0;
while(i='0'&&s.charAt(i)<='9')
{
tmp=tmp*10+s.charAt(i)-'0';
i++;
}
if(exp=='+') result=result+tmp;
else if(exp=='-') result-=tmp;
else if(exp=='*') result*=tmp;
else if(exp=='/') result/=tmp;
else result++;
}
return result;
}
Calculator()
{
super("计算器");
setResizable(true);
setBounds(100,100,300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel viewPanel=new JPanel();
getContentPane().add(viewPanel,BorderLayout.NORTH);
final JTextField textField=new JTextField();
textField.setEditable(true);
textField.setHorizontalAlignment(SwingConstants.LEFT);
textField.setColumns(18);
viewPanel.add(textField);
viewPanel.setBounds(0,0,200,200);
JPanel buttonPanel=new JPanel();
GridLayout gridLayout=new GridLayout(4,0);
gridLayout.setVgap(10);
gridLayout.setHgap(10);
buttonPanel.setLayout(gridLayout);
getContentPane().add(buttonPanel,BorderLayout.CENTER);
String [][]names={ {"1","2","3","+"},
{"4","5","6","-"},
{"7","8","9","*"},
{"0","清除","=","/"}};
JButton[][] buttons=new JButton[4][4];
//定义监听器
class ButtonAction implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
JButton button=(JButton) e.getSource();
String name=e.getActionCommand();
int n;
if(name=="清除")
textField.setText("");
else if(name=="=")
{
String str=textField.getText();
n=fun(str);
textField.setText(str+"="+String.valueOf(n));
}
else
{
name=textField.getText()+name;
textField.setText(name);
}
}
}
for(int row=0;row
for(int col=0;col
{
buttons[row][col]=new JButton(names[row][col])