1. 事件处理:简单计算器实现
【问题描述】
实现一个简单的计算器,前面是一个文本框(操作数1),后面是标签(操作符),再后面是一个文本框(操作数2),然后是一个"="按钮(JButton),最后是一个文本框(结果)
(1)实现按钮ActionEvent事件的处理,点击等号获取计算结果,并显示在最后一个文本框;
(2)实现第二个文本框的ActionEvent事件处理,在第二个文本框按回车,直接获得计算结果,并显示在最后一个文本框。(事件源为第二个文本框)
(3)实现运算符标签的MouseEvent事件的处理,点击标签,可以更换标签的运算符,比如:将加号改成减号,从而实现减法功能,点击等号按钮,实现减法运算,并将结果显示在第三个文本框中。(具体实现:实现mouseClicked()时,判断鼠标单击次数是否为除4余0、余1、余2、余3,比如余为1,则将运算符标签上的字符修改为”-”,从而实现减法运算)
运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ea2d416e4ad04dc08cfbd2e6f8a95ca5.png)
源码:
package sumGUI;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class SumGUI {
public static void main(String[] args) {
// TODO Auto-generated method stub
new sum_GUI();
}
}
class sum_GUI extends JFrame implements ActionListener, MouseListener {
private int op = 0;
private JPanel jp;
private JLabel jl;
private JButton jb1;
private JTextField jt1, jt2, jt3;
public sum_GUI() {
jp = new JPanel();
jl = new JLabel("+");
jb1 = new JButton("=");
jt1 = new JTextField(5);
jt2 = new JTextField(5);
jt3 = new JTextField(10);
jp.add(jt1);
jp.add(jl);
jp.add(jt2);
jp.add(jb1);
jp.add(jt3);
jb1.addActionListener(this);
jl.addMouseListener(this);
this.add(jp);
this.setTitle("simple Calculator");
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Caculator();
}
public void check() {
op += 1;
switch (op % 4) {
case 0:
jl.setText("+");
break;
case 1:
jl.setText("-");
break;
case 2:
jl.setText("*");
break;
case 3:
jl.setText("/");
break;
}
}
public void Caculator() {
switch (op % 4) {
case 0:
jt3.setText(String.valueOf((Double.parseDouble(jt1.getText()) + Double.parseDouble(jt2.getText()))));
break;
case 1:
jt3.setText(String.valueOf((Double.parseDouble(jt1.getText()) - Double.parseDouble(jt2.getText()))));
break;
case 2:
jt3.setText(String.valueOf((Double.parseDouble(jt1.getText()) * Double.parseDouble(jt2.getText()))));
break;
case 3:
jt3.setText(String.valueOf((Double.parseDouble(jt1.getText()) / Double.parseDouble(jt2.getText()))));
break;
}
}
@Override
public void mouseClicked(MouseEvent arg0) {
check();
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
}
2. Student类及相应的图形用户界面
【问题描述】
设计一个Student类并编写代码,Student类的属性有姓名,出生年、月、日;自定义的方法:至少包括计算学生年龄的方法calAge()。编写一个GUI类,输入学生的姓名和出生年、月、日,由此创建这个Student对象,调用Student类的方法calAge(),计算出该学生的年龄,并将年龄显示在用户界面上。(大致界面如下,是否加背景、是否使用滚动窗格自行决定。)
运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/f62debb7ec2e411c8b0f7a379d8955ad.png)
源码:
package stuGUI;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class StuGUI {
public static void main(String[] args) {
// TODO Auto-generated method stub
new stu_GUI();
}
}
class stu_GUI extends JFrame implements ActionListener {
JLabel jl1, jl2, jl3, jl4, jl5, jl6;
JTextField jtf1, jtf2, jtf3, jtf4;
JTextArea jta;
JButton jb1, jb2;
JPanel jp1, jp2, jp3, jp4;
JScrollPane jsp;
public stu_GUI() {
jl1 = new JLabel("name");
jl2 = new JLabel("bornDate");
jl3 = new JLabel("year");
jl4 = new JLabel("month");
jl5 = new JLabel("day");
jl6 = new JLabel("age of the student:");
jtf1 = new JTextField(20);
jtf2 = new JTextField(5);
jtf3 = new JTextField(5);
jtf4 = new JTextField(5);
jta = new JTextArea(3, 13);
jb1 = new JButton("OK");
jb2 = new JButton("cancel");
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp4 = new JPanel();
jsp = new JScrollPane(jta);
//jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jp1.add(jl1);
jp1.add(jtf1);
jp2.add(jl2);
jp2.add(jtf2);
jp2.add(jl3);
jp2.add(jtf3);
jp2.add(jl4);
jp2.add(jtf4);
jp2.add(jl5);
jp3.add(jl6,BorderLayout.NORTH);
jp3.add(jsp);
jp4.add(jb1);
jp4.add(jb2);
jb1.addActionListener(this);
jb2.addActionListener(this);
this.setLayout(new GridLayout(4, 1));
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.setTitle("calculate Student's age");
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == jb1)
jta.setText(String.valueOf(Calculate()));
else if (e.getSource() == jb2)
clear();
}
public int Calculate() {
Calendar calendar = Calendar.getInstance();
if ( calendar.get(Calendar.DATE) - Integer.parseInt(jtf4.getText())>=0) {
if (calendar.get(Calendar.MONTH) - Integer.parseInt(jtf3.getText())>=0)
return calendar.get(Calendar.YEAR) - Integer.parseInt(jtf2.getText());
else
return calendar.get(Calendar.YEAR) - Integer.parseInt(jtf2.getText())-1;}
else {
if (calendar.get(Calendar.MONTH) - Integer.parseInt(jtf3.getText())>=0)
return calendar.get(Calendar.YEAR) - Integer.parseInt(jtf2.getText());
else
return calendar.get(Calendar.YEAR) - Integer.parseInt(jtf2.getText())-1;
}
}
public void clear() {
jtf1.setText("");
jtf2.setText("");
jtf3.setText("");
jtf4.setText("");
}
}
END:每一次尝试,都在塑造更加强大的我。
|