南邮-JAVA实验课(四)(含进阶版本)

第四次实验

本次实验主要练习知识点是:
Java GUI组件的使用
布局的练习
按钮的监听事件
线程的定义与使用

1、简单的计算器

编写一个应用程序,利用两个文本框对象input1和input2,接收用户从键盘输入的两个整型数。当用户单击“计算”按钮时,可进行算术计算,并输出运算结果;运算结果放在多行文本域JTextArea组件中。编写一个应用程序,利用两个文本框对象input1和input2,接收用户从键盘输入的两个整型数。当用户单击“计算”按钮时,可进行算术计算,并输出运算结果;运算结果放在多行文本域JTextArea组件中。

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Main extends JFrame{
	
	public static void main(String args[]) {
		InitMain();
	}
	public static void InitMain() {
		String[] fuhaos= {"+","-","*","/"};
		Main mainFrame = new Main();
		mainFrame.setBounds(800, 400, 450, 80);
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mainFrame.setLayout(new FlowLayout());
		
		JTextField input1 = new JTextField(6);
		JTextField input2 = new JTextField(6);
		JButton btn = new JButton("计算");
		JComboBox<String> fuhao = new JComboBox<>(fuhaos);
		JLabel equrt = new JLabel("=");
		JTextArea result = new JTextArea(1, 4);
		
		mainFrame.add(input1);
		mainFrame.add(fuhao);
		mainFrame.add(input2);
		mainFrame.add(equrt);
		mainFrame.add(result);
		mainFrame.add(btn);
		
		mainFrame.setVisible(true);
		
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int temp = 0;
				switch(fuhao.getSelectedItem().toString()) {
				case "+":
					try {
						temp = Integer.valueOf(input1.getText())+Integer.valueOf(input2.getText());
						result.setText(String.valueOf(temp));
					}catch (Exception e1) {
						result.setText("非法字符请重新输入");
					}
					break;
				case "-":
					try {
						temp = Integer.valueOf(input1.getText())-Integer.valueOf(input2.getText());
						result.setText(String.valueOf(temp));
					}catch (Exception e1) {
						result.setText("非法字符请重新输入");
					}
					break;
				case "*":
					try {
						temp = Integer.valueOf(input1.getText())*Integer.valueOf(input2.getText());
						result.setText(String.valueOf(temp));
					}catch (Exception e1) {
						result.setText("非法字符请重新输入");
					}
					break;
				case "/":
					try {
						temp = Integer.valueOf(input1.getText())/Integer.valueOf(input2.getText());
						result.setText(String.valueOf(temp));
					}catch (Exception e1) {
						result.setText("非法字符请重新输入");
					}
					break;
				}
			}
		});
	}
}

外观:
在这里插入图片描述
加法:
在这里插入图片描述
减法:
在这里插入图片描述
乘法:
在这里插入图片描述
除法:
在这里插入图片描述

错误输入示例:

输入含有字母:
在这里插入图片描述
除数为0:
在这里插入图片描述

改进:经过老师的提点,给出了一个大概的思路框架,特修改版本如下:
1、点击计算按钮,在文本区域里直接显示两个数的四则运算
2、点击计算按钮,在文本域里随机显示两个数的四则运算的其中一个

先上图:

在这里插入图片描述
在这里插入图片描述

代码如下:
import java.awt.BorderLayout;
import java.awt.Font;
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.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class Main {
	public static void main(String args[]) {
		new MyFrame("First",1); 
		new MyFrame("Second",2);
	}
}
class MyFrame extends JFrame implements ActionListener{
	JPanel mypanel,mypanel2;
	JTextArea textArea;
	JTextField input1,input2;
	JLabel label1,label2;
	JButton btn;
	JScrollPane scroll;
	int type = 0;
	public MyFrame(String title,int type) {
		this.type = type;
		
		mypanel = new JPanel();
		mypanel2 = new JPanel();
		textArea = new JTextArea(7,21);
		textArea.setFont(new Font("Serif",0,20));
		input1 = new JTextField(6);
		input2 = new JTextField(6);
		label1 = new JLabel("input1:");
		label2 = new JLabel("input2:");
		label2.setBorder(new EmptyBorder(0, 20, 0, 0));
		btn = new JButton("计算");
		btn.addActionListener(this);
		scroll = new JScrollPane(textArea);
		
		mypanel.add(label1);
		mypanel.add(input1);
		mypanel.add(label2);
		mypanel.add(input2);
		mypanel.add(btn);
		
		mypanel2.add(scroll);
		
		setTitle(title);
		if(type == 1)
			setBounds(400, 200, 400, 300);
		else
			setBounds(820, 200, 400, 300);
		add(mypanel,BorderLayout.NORTH);
		add(mypanel2, BorderLayout.CENTER);
		setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent event) {
		int firNum,secNum;
		try {
			firNum = Integer.parseInt(input1.getText());
			secNum = Integer.parseInt(input2.getText());
			switch(type) {
			case 1:
				if(secNum != 0) {
					textArea.append(firNum+"+"+secNum+"="+(firNum+secNum));
					textArea.append("\t"+firNum+"-"+secNum+"="+(firNum-secNum)+"\n");
					textArea.append(firNum+"*"+secNum+"="+(firNum*secNum));
					textArea.append("\t"+firNum+"/"+secNum+"="+(firNum/secNum)+"\n");
				}else {
					textArea.append(firNum+"+"+secNum+"="+(firNum+secNum));
					textArea.append("\t"+firNum+"-"+secNum+"="+(firNum-secNum)+"\n");
					textArea.append(firNum+"*"+secNum+"="+(firNum*secNum));
					textArea.append("\t除数为0\n");
				}
				break;
			case 2:
				int x=1+(int)(Math.random()*4);
				switch(x) {
				case 1:
					textArea.append(firNum+"+"+secNum+"="+(firNum+secNum)+"\n");
					break;
				case 2:
					textArea.append(firNum+"-"+secNum+"="+(firNum-secNum)+"\n");
					break;
				case 3:
					textArea.append(firNum+"*"+secNum+"="+(firNum*secNum)+"\n");
					break;
				case 4:
					if(secNum != 0) {
						textArea.append(firNum+"/"+secNum+"="+(firNum/secNum)+"\n");
					}else {
						textArea.append("除数为0!\n");
					}
					break;
				}
				break;
			}
		}catch (Exception e) {
			textArea.append("您的输入含有非数字类型,请重新输入!\n");
		}
	}
}
2、计算

编写一个应用程序,设计4个按钮,分别命名为“加”、“减”、“乘”、“除”,有3个文本框。单击相应的按钮,将两个文本框的数字做运算,在第三个文本框中显示结果。

import java.awt.FlowLayout;
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;

public class Main extends JFrame{
	public static void main(String args[]) {
		Initmain();
	}

	private static void Initmain() {
		Main mainFrame = new Main();
		mainFrame.setTitle("ALU");
		mainFrame.setLayout(new FlowLayout());
		
		JPanel mPanel = new JPanel();
		mPanel.setLayout(new GridLayout(4,1));
		JButton addBt = new JButton("加");
		JButton decBt = new JButton("减");
		JButton mulBt = new JButton("乘");
		JButton divBt = new JButton("除");
		mPanel.add(addBt);
		mPanel.add(decBt);
		mPanel.add(mulBt);
		mPanel.add(divBt);
		
		JLabel label1 = new JLabel("=");
		JTextField input1 = new JTextField(4);
		JTextField input2 = new JTextField(4);
		JTextField output = new JTextField(4);
		
		mainFrame.add(input1);
		mainFrame.add(mPanel);
		mainFrame.add(input2);
		mainFrame.add(label1);
		mainFrame.add(output);
		

		mainFrame.setBounds(800, 400, 450, 160);
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mainFrame.setVisible(true);
		
		
		addBt.addActionListener(new ActionListener() {
			int temp;
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					temp = Integer.valueOf(input1.getText())+Integer.valueOf(input2.getText());
					output.setText(String.valueOf(temp));
				}catch (Exception e1) {
					output.setText("错误!");
				}
			}
		});
		
		decBt.addActionListener(new ActionListener() {
			
			int temp;
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					temp = Integer.valueOf(input1.getText())-Integer.valueOf(input2.getText());
					output.setText(String.valueOf(temp));
				}catch (Exception e1) {
					output.setText("错误!");
				}
			}
		});
		
		mulBt.addActionListener(new ActionListener() {
			
			int temp;
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					temp = Integer.valueOf(input1.getText())*Integer.valueOf(input2.getText());
					output.setText(String.valueOf(temp));
				}catch (Exception e1) {
					output.setText("错误!");
				}
			}
		});
		
		divBt.addActionListener(new ActionListener() {
			
			int temp;
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					temp = Integer.valueOf(input1.getText())/Integer.valueOf(input2.getText());
					output.setText(String.valueOf(temp));
				}catch (Exception e1) {
					output.setText("错误!");
				}
			}
		});
	}
}

外观:
在这里插入图片描述
加法:
在这里插入图片描述
减法:
在这里插入图片描述
乘法:
在这里插入图片描述
除法:
在这里插入图片描述
错误输入示例:
在这里插入图片描述
在这里插入图片描述

经过老师上课演示的一个示例来看,我做的这个太low了,太丑的了,决心修改一番
在已有的功能基础上增加了错误时间的响应(弹出的提示框)

先上效果图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上代码:
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.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class Main {
	public static void main(String args[]) {
		new Myframe("Second");
	}
}
class Myframe extends JFrame implements ActionListener{
	JPanel mypanel,mypanel2;
	JTextField input1,input2,output;
	JButton addbtn,decbtn,mulbtn,divbtn;
	JLabel label1,label2,label3;
	public Myframe(String title){
		mypanel = new JPanel();
		mypanel2 =new JPanel();
		
		input1 = new JTextField(6);
		input2 = new JTextField(6);
		output = new JTextField(6);
		
		label1 = new JLabel("input1:");
		label2 = new JLabel("input2:");
		label2.setBorder(new EmptyBorder(0, 20, 0, 0));
		label3 = new JLabel("result:");
		label3.setBorder(new EmptyBorder(0, 20, 0, 0));
		
		addbtn = new JButton("加");
		decbtn = new JButton("减");
		mulbtn = new JButton("乘");
		divbtn = new JButton("除");
		addbtn.addActionListener(this);
		decbtn.addActionListener(this);
		mulbtn.addActionListener(this);
		divbtn.addActionListener(this);
		
		mypanel.add(label1);
		mypanel.add(input1);
		mypanel.add(label2);
		mypanel.add(input2);
		mypanel.add(label3);
		mypanel.add(output);
		
		mypanel2.add(addbtn);
		mypanel2.add(decbtn);
		mypanel2.add(mulbtn);
		mypanel2.add(divbtn);
		
		add(mypanel);
		add(mypanel2);
		setTitle(title);
		setBounds(400, 200, 460, 140);
		setLayout(new GridLayout(2, 1));
		setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent event) {
		int firNum,secNum;
		if(input1.getText().equals("")||input2.getText().equals(""))
			JOptionPane.showMessageDialog(null, "输入不能为空!", "错误", JOptionPane.ERROR_MESSAGE);
		else
		try {
			firNum = Integer.parseInt(input1.getText());
			secNum = Integer.parseInt(input2.getText());
			if(event.getSource() == addbtn) {
				output.setText(String.valueOf(firNum+secNum));
			}else if(event.getSource() == decbtn) {
				output.setText(String.valueOf(firNum-secNum));
			}else if(event.getSource() == mulbtn) {
				output.setText(String.valueOf(firNum*secNum));
			}else if(event.getSource() == divbtn) {
				if(secNum == 0) {
					JOptionPane.showMessageDialog(null, "除数不能为0!", "错误", JOptionPane.ERROR_MESSAGE);
				}else {
					output.setText(String.valueOf(firNum/secNum));
				}
			}
		}catch (Exception e) {
			JOptionPane.showMessageDialog(null, "您的输入含有非法字符!", "错误", JOptionPane.ERROR_MESSAGE);
		}
	}
}
3、线程的定义和使用

编写一个有两个线程的程序,第一个线程用来计算2~100000之间的质数及个数,第二个线程用来计算100000-200000之间的质数及个数。

public class Main {

	public static void main(String args[]) {
		
		Thread thread1 = new Thread(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("2-100000之间的质数个数:"+fundSushu(2,100000));
			}
		});
		Thread thread2 = new Thread(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("100000-200000之间的质数个数:"+fundSushu(100000,200000));
			}
		});
		
		thread1.start();
		thread2.start();
	}
	
	
	public static int fundSushu(int start,int end) {
		int count1 = 0, count2 = 0;
		for (int i = start; i <= end; i++) {
			for (int j = 2; j <= Math.sqrt(i); j++) {
				if (i % j != 0) {
					count1++;
				}
			}
			int num = (int) Math.sqrt(i);
			if (count1 == (num - 1)) {
				count2++;
			}
			count1 = 0;
		}
		return count2;
	}
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
武汉理工大学的Java实验课程中,包了网络编程的内容。网络编程是指利用计算机网络进行信息交流和资源共享的编程技术。在这门课程中,学生将学习如何使用Java语言进行网络编程,以实现跨网络的数据传输和通信。 首先,学生将了解计算机网络的基本概念和网络编程的原理。他们将学习TCP/IP协议族和UDP协议的基本知识,了解套接字(Socket)编程的基本原理和使用方法。 然后,学生将学习使用Java提供的网络编程API,如Socket和ServerSocket类来实现网络通信。他们将学习如何创建客户端和服务器端的程序,通过网络进行数据传输和交互。学生将学习如何使用TCP协议建立可靠的连接和进行可靠的数据传输,以及如何使用UDP协议进行快速的数据传输。 在实验课中,学生将深入学习网络编程的高级主题,如多线程编程、并发编程和异步编程。他们将学习如何实现多个客户端与服务器的并发通信,如何处理并发访问造成的竞争条件和线程安全问题,以及如何利用非阻塞IO实现异步编程。 此外,学生还将学习如何使用Java的网络编程库,如Java NIO(New IO)和Java IO(Input/Output)类库,来简化网络编程的实现和提高程序的性能。 通过这门实验课程,学生将能够掌握Java网络编程的基本原理和技术,具备使用Java进行网络编程的能力。这将为他们今后从事与网络相关的软件开发工作奠定基础,并为他们提供更好的就业竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值