JAVA日常练习 ——练习7 图形用户界面设计及事件响应

1. 事件处理:简单计算器实现

【问题描述】

实现一个简单的计算器,前面是一个文本框(操作数1),后面是标签(操作符),再后面是一个文本框(操作数2),然后是一个"="按钮(JButton),最后是一个文本框(结果)

(1)实现按钮ActionEvent事件的处理,点击等号获取计算结果,并显示在最后一个文本框;

(2)实现第二个文本框的ActionEvent事件处理,在第二个文本框按回车,直接获得计算结果,并显示在最后一个文本框。(事件源为第二个文本框)

(3)实现运算符标签的MouseEvent事件的处理,点击标签,可以更换标签的运算符,比如:将加号改成减号,从而实现减法功能,点击等号按钮,实现减法运算,并将结果显示在第三个文本框中。(具体实现:实现mouseClicked()时,判断鼠标单击次数是否为除4余0、余1、余2、余3,比如余为1,则将运算符标签上的字符修改为”-”,从而实现减法运算)

运行结果:

JAVA日常练习 ——练习7 图形用户界面设计及事件响应_第1张图片

源码:

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(),计算出该学生的年龄,并将年龄显示在用户界面上。(大致界面如下,是否加背景、是否使用滚动窗格自行决定。)

运行结果:

JAVA日常练习 ——练习7 图形用户界面设计及事件响应_第2张图片

源码:

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:每一次尝试,都在塑造更加强大的我。

你可能感兴趣的:(JAVA知识池,java,开发语言)