目录
前言
根据题目要求完成各题 图形用户界面及事件响应的相关题,在自己的电脑运行正确、正常显示界面,完成事件处理,提交后出现错误不用管,也不用担心没分
环境:IDEA
一、事件处理:简单计算器实现
问题描述:
实现一个简单的计算器,前面是一个文本框(操作数1),后面是标签(操作符),再后面是一个文本框(操作数2),然后是一个"="按钮(JButton),最后是一个文本框(结果)
(1)实现按钮ActionEvent事件的处理,点击等号获取计算结果,并显示在最后一个文本框;
(2)实现第二个文本框的ActionEvent事件处理,在第二个文本框按回车,直接获得计算结果,并显示在最后一个文本框。(事件源为第二个文本框)
(3)实现运算符标签的MouseEvent事件的处理,点击标签,可以更换标签的运算符,比如:将加号改成减号,从而实现减法功能,点击等号按钮,实现减法运算,并将结果显示在第三个文本框中。(具体实现:实现mouseClicked()时,判断鼠标单击次数是否为除4余0、余1、余2、余3,比如余为1,则将运算符标签上的字符修改为”-”,从而实现减法运算)
代码实现:
//Calculator.java
package practice_7_1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener, MouseListener,KeyListener {
//设置全局变量以便于实现接口中的方法
JButton btn;
JTextField num1TextField,num2TextField,resultTextField;
JLabel label;
public Calculator() {
super("Simple Calculator");
Container c = this.getContentPane();
c.setLayout(new FlowLayout());
num1TextField = new JTextField(5);
num2TextField = new JTextField(5);
resultTextField = new JTextField(8);
btn = new JButton("=");
label = new JLabel("+");
c.add(num1TextField);
c.add(label);
c.add(num2TextField);
c.add(btn);
c.add(resultTextField);
btn.addActionListener(this);
label.addMouseListener(this);
num2TextField.addActionListener(this);
//num2TextField.addKeyListener(this);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setSize(400,210);
this.setLocationRelativeTo(null);//居中显示
this.setVisible(true);
}
public static void main(String[] args) {
new Calculator();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btn||e.getSource() == num2TextField){
calculate();
}
}
private void calculate() {
double a,b;
a = Double.parseDouble(num1TextField.getText());
b = Double.parseDouble(num2TextField.getText());
switch (label.getText()){
case "+": resultTextField.setText(String.valueOf(a+b));break;
case "-":
resultTextField.setText(String.valueOf(a-b));break;
case "*":
resultTextField.setText(String.valueOf(a*b));break;
case "/":
if (b==0){
JOptionPane.showMessageDialog(null,"The divisor is 0!","Input error", JOptionPane.INFORMATION_MESSAGE);
break;
}
resultTextField.setText(String.valueOf(a/b));
default:break;
}
}
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount()%4 == 1){
label.setText("-");
}
if (e.getClickCount()%4==2){
label.setText("*");
}
if (e.getClickCount()%4==3){
label.setText("/");
}
if (e.getClickCount()%4==0){
label.setText("+");
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
//https://blog.csdn.net/lly1122334/article/details/96481184
public void keyTyped(KeyEvent e) {
if((char)e.getKeyChar()==KeyEvent.VK_ENTER) {
calculate();
}
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
材料引用:
文本框中响应回车键(KeyEvent):
(38条消息) Java文本框监听回车(KeyEvent事件)_java 键盘监听回车_XerCis的博客-CSDN博客
感谢:
文本框响应回车用ActionListener监听代码更加简洁;多谢2203班 于宏嘉同学的分享
界面显示:
二、Student类及相应的图形用户界面
问题描述:
设计一个Student类并编写代码,Student类的属性有姓名,出生年、月、日;自定义的方法:至少包括计算学生年龄的方法calAge()。编写一个GUI类,输入学生的姓名和出生年、月、日,由此创建这个Student对象,调用Student类的方法calAge(),计算出该学生的年龄,并将年龄显示在用户界面上。(大致界面如下,是否加背景、是否使用滚动窗格自行决定。)
代码实现:
//Student.java
package practice_7_2;
import java.util.Calendar;
public class Student {
private String name;
private int year,month,day;
//获取当前年份
//https://blog.csdn.net/weixin_41905537/article/details/105880913
//获取当前时间
Calendar calendar = Calendar.getInstance();
public int calAge(){
return calendar.get(Calendar.YEAR)-year;
}
public Student(int year) {
this.year = year;
}
}
//CalAge.java
package practice_7_2;
//import com.sun.org.apache.bcel.internal.generic.LAND;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CalAge extends JFrame implements ActionListener{
JButton okBtn,cancelBtn;
Student student ;
JTextField yearTextField,nameTextF,monthTextF,dayTextF;
//滚动窗格
//https://blog.csdn.net/weixin_42247720/article/details/80480760
//https://blog.csdn.net/qq_43464558/article/details/113516507
JScrollPane jsp1,jsp2;
JTextArea jTextArea;
//设置背景图片
//https://blog.csdn.net/he13733625052/article/details/90177674#:~:text=1.%E5%9C%A8JAVA%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AAFolder%EF%BC%88%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%89%EF%BC%8C%E6%8A%8A%E5%87%86%E5%A4%87%E5%A5%BD%E7%9A%84%E5%9B%BE%E7%89%87%E5%A4%8D%E5%88%B6%E7%B2%98%E8%B4%B4%E8%BF%9B%E5%8E%BB%EF%BC%8C%E5%9C%A8%E5%87%BA%E7%8E%B0%E5%A6%82%E4%B8%8B%E5%9B%BE%E7%89%87%E6%97%B6%E7%82%B9%E5%87%BBok%EF%BC%8C%E6%9C%80%E5%A5%BD%E6%8A%8A%E5%9B%BE%E7%89%87%E5%90%8D%E5%AD%97%E4%BF%AE%E6%94%B9%E7%9A%84%E7%AE%80%E5%8D%95%E4%B8%80%E7%82%B9%E3%80%82%202.%E7%AA%97%E5%8F%A3%E5%B8%83%E5%B1%80%E4%B8%BA%E5%88%86%E5%B1%82%E7%BD%91%E6%A0%BC%E3%80%82,3.%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%A0%87%E7%AD%BE%EF%BC%88JLabel%EF%BC%89%EF%BC%8C%E6%8A%8A%E5%9B%BE%E7%89%87%E6%94%BE%E5%85%A5%E6%A0%87%E7%AD%BE%E4%B8%AD%E3%80%82%204.%E8%AE%BE%E7%BD%AE%E6%8C%89%E9%92%AE%E7%AD%89%E7%BB%84%E4%BB%B6%E9%80%8F%E6%98%8E%E3%80%82
//https://blog.csdn.net/m0_54202580/article/details/121325073
//ImageIcon imageIcon;
//JLabel backgroundLabel;
public CalAge() {
super("calculate Student's age");
Container c = this.getContentPane();
c.setLayout(new GridLayout(4, 1));
JPanel panel1 = new JPanel(new FlowLayout());
JPanel panel2 = new JPanel(new FlowLayout());
JPanel panel3 = new JPanel(new FlowLayout());
JPanel panel4 = new JPanel(new FlowLayout());
nameTextF = new JTextField(10);
yearTextField = new JTextField(8);
monthTextF = new JTextField(3);
dayTextF = new JTextField(3);
JLabel nameLabel = new JLabel("name");
JLabel dateLabel = new JLabel("bornDate");
JLabel yearLabel = new JLabel("year");
JLabel monthLabel = new JLabel("month");
JLabel dayLabel = new JLabel("day");
JLabel ageLabel = new JLabel("age of the student");
okBtn = new JButton("OK");
cancelBtn = new JButton("cancel");
jTextArea = new JTextArea(10,10);
//JScrollPane 水平垂直设置
//https://blog.csdn.net/chaozhidan/article/details/8489665
jsp1 = new JScrollPane(jTextArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
jsp2 = new JScrollPane(jTextArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//imageIcon = new ImageIcon("background.png");
//backgroundLabel = new JLabel(imageIcon);
//backgroundLabel.setBounds(0,0,imageIcon.getIconWidth(),imageIcon.getIconHeight());
//c.add(backgroundLabel);
panel1.add(nameLabel);
panel1.add(nameTextF);
panel2.add(dateLabel);
panel2.add(yearTextField);
panel2.add(yearLabel);
panel2.add(monthTextF);
panel2.add(monthLabel);
panel2.add(dayTextF);
panel2.add(dayLabel);
panel3.add(ageLabel);
panel3.add(jsp1);
panel3.add(jsp2);
panel4.add(okBtn);
panel4.add(cancelBtn);
c.add(panel1);
c.add(panel2);
c.add(panel3);
c.add(panel4);
okBtn.addActionListener(this);
cancelBtn.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
//居中显示
//https://blog.csdn.net/czbqoo01/article/details/69927335
setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
new CalAge();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == okBtn){
int year = Integer.parseInt(yearTextField.getText());
student = new Student(year);
jTextArea.setText(String.valueOf(student.calAge()));
}
if (e.getSource() == cancelBtn){
nameTextF.setText("");
yearTextField.setText("");
monthTextF.setText("");
dayTextF.setText("");
}
}
}
材料引用:
获取当前年份:
(38条消息) java获取当前年份、月份和日期字符串等_java获取当前时间字符串_Joseph9499的博客-CSDN博客
滚动窗格:
1、
(38条消息) JavaGUI——swing组件基础(四)下拉框/列表框/滚动窗格组件_狮子座的程序员的博客-CSDN博客
2、
(38条消息) javaGUI学习27:AWT-滚动:滚动条与滚动框_awt 滚动布局_八十岁老将的博客-CSDN博客
设置背景图片:
1、(38条消息) Java界面:java设置背景图片_java中添加背景图片_风不会停息_H的博客-CSDN博客
2、
(38条消息) Java GUI设置背景图片的方法_gui界面背景_果粒程炸串酱的博客-CSDN博客
JScorllPane水平 竖直设置:
(38条消息) JScrollPane水平,垂直条设置_chaozhidan的博客-CSDN博客
GUI居中显示:
(38条消息) JFrame居中显示的两种方法_jframe居中显示方法_ReaderWriter的博客-CSDN博客
界面显示:
末尾
学习时间较短,本文仅供学习交流。
欢迎斧正文中的不足与分享宝贵建议!
感谢观看