飞道的博客

【干货干货!内附源码】多边形的面积及周长计算~java Swing开发可视化小程序,exe4j打包成exe可执行文件

456人阅读  评论(0)

前言

这是我们学院一个专业老师布置的一个作业,当时没有教图形界面编程,老师让我们自学,7天后交作品,规定用php或者java,所以我在周六周日两天复习了java,新学了swing组件,swing现在了解个大概,会用,但是做到精通估计还需要好好研究一番,昨天的时候又研究了一天的exe4j,终于生成可执行文件了,结果eclipse打不开了,后面发现是jdk版本冲突(我下了两个),又搞了一晚上,终于是把问题解决了,因此笔者在这里把代码分享给大家,仅供参考!笔者很菜,心灵脆弱,大佬们求放过~~好的,切入主题

先来张做好的效果图,界面可能有点丑,以上的图片都是百度自己挑的~老师的题意是让我们求三角形,矩形,圆形的面积和周长,首先可以联想到三个类,即圆类(Circular),矩形类(Rectangle)和三角形类(Triangle)以及一个主类(polygon)

圆类

下面对圆类分析,如果知道半径,那么周长,面积都可以搞定,所以圆类里有一个变量:半径,对其封装。之后再在圆类下写出求面积以及周长的函数,圆类代码如下:

package text1;

public class Circular {
   	//圆类
	private double r;
	public void setR(double r) {
   
		this.r=r;
	}
	public double getR() {
   
		return r;
	}
	public double Area() {
   	//求面积,去π为3.14
		return r*r*3.14;
	}
	public double Grith() {
   	//求周长
		return 2*r*3.14;
	}
}

矩形类

对于矩形类的话,只需要两个变量即可,也就是长和宽,同样也对其进行封装,然后建立求周长和面积的函数,具体代码如下:

package text1;

public class Rectangle {
   	//矩形类
	private double a;	//长
	private double b;	//宽
	public void seta(double a) {
   
		this.a=a;
	}
	public double geta() {
   
		return a;
	}
	public void setb(double b) {
   
		this.b=b;
	}
	public double getb() {
   
		return b;
	}
	public double Area() {
   	//求面积
		return a*b;
	}
	public double Grith() {
   	//求周长
		return (a+b)*2;
	}
}

三角形类

对于三角形类,相信大家都熟悉海伦公式吧,有了海伦公式,我们不需要知道三角形的高也可以求出其面积,所以对于该类只需要建立三个变量,即三边的长即可。具体代码如下:

package text1;

public class Triangle {
   
	private double a;
	private double b;
	private double c;
	public void setA(double a) {
   
		this.a=a;
	}
	public double getA() {
   
		return a;
	}
	public void setB(double b) {
   
		this.b=b;
	}
	public double getB() {
   
		return b;
	}
	public void setC(double c) {
   
		this.c=c;
	}
	public double getC() {
   
		return c;
	}
	public double Area() {
   
		double p=(a+b+c)/2;
		return Math.sqrt(p*(p-a)*(p-b)*(p-c));
	}
	public double Grith() {
   
		return a+b+c;
	}
}


做完这些之后,那么接下来的任务就是界面编程啦,java的界面编程需要用到swing组件,对于刚开始学swing组件的注意事项笔者会在文末分享给大家(会用的大佬忽略我)。下面先来介绍一下常用的Swing组件。

组件名称 定义
JButton 代表Swing按钮,按钮中可以带一些图片及文字
JCheckBox 代表Swing中的复选框组件
JComBox 代表下拉表框,可以在下拉显示区域显示多个选项
JFrame 代表Swing的框架类
JDialog 代表Swing版本的对话框
JLabel 代表Swing中的标签组件
JRadioButton 代表Swing的单选按钮
JList 代表能在用户界面中显示的一系列条目的组件
JTextField 代表文本框
JPasswordField 代表密码框
JTextArea 代表Swing中的文本区域
JOptionPane 代表Swing中的一些对话框

因为本文介绍的是那种很简单的界面程序开发,所以不需要全部了解,只需要了解其中的JFrame(必要)、JLabel、JTextField、JButton四个组件以及动作事件监听器(ActionEvent)和布局(本文选用绝对布局)即可。对于JFrame,其实它是一个容器,是Swing程序中各个组件的载体(如果难以理解的话可以这样来想,把JFrame看成是一间没有家具的房间,而其他组件就相当于家具的品牌,当我们买到我们需要的某个品牌的家具时,就把家具运回房间,这就相当于我们需要哪个组件时,就在使用这个组件建立一个对象,然后将这对象添加到容器JFrame中)。对于其它的组件此处不做详细介绍,接下来直接上干货

主程~干货!!!

package text1;

import javax.swing.SwingConstants;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.print.DocFlavor.URL;
import javax.swing.*;

public class polygon extends JFrame{
   	//继承JFrame类
	public polygon () {
   
		setTitle("多边形的面积与周长计算");
		setLayout(null);	//绝对布局
		setBounds(400,200,660,480);	//设置窗体出现位置以及窗体大小
		
		//需要的图片
		ImageIcon i1 = new ImageIcon("Src/text1/circle.jpg");
		ImageIcon i2 = new ImageIcon("Src/text1/rectangle.jpg");
		ImageIcon i3 = new ImageIcon("Src/text1/triangle.jpg");
		ImageIcon i4 = new ImageIcon("Src/text1/background.jpg");
		
		Container c = getContentPane();	//获取一个容器
		
		//文本款组件
		JTextField cr = new JTextField();
		JTextField ra = new JTextField();
		JTextField rb = new JTextField();
		JTextField ta = new JTextField();
		JTextField tb = new JTextField();
		JTextField tc = new JTextField();
		JTextField c_area = new JTextField();
		JTextField c_grith = new JTextField();
		JTextField r_area = new JTextField();
		JTextField r_grith = new JTextField();
		JTextField t_area = new JTextField();
		JTextField t_grith = new JTextField();
		
		//标签组件
		JLabel jl1 = new JLabel("圆形");
		JLabel jl2 = new JLabel("矩形");
		JLabel jl3 = new JLabel("三角形");
		JLabel jl4 = new JLabel("请输入圆的半径:");
		JLabel jl5 = new JLabel("请输入矩形的长:");
		JLabel jl6 = new JLabel("请输入矩形的宽:");
		JLabel jl8 = new JLabel("请输入三角形的边长:");
		JLabel jl9 = new JLabel("请输入三角形的边长:");
		JLabel jl10 = new JLabel("请输入三角形的边长:");
		JLabel jl11 = new JLabel("圆的面积为:");
		JLabel jl12 = new JLabel("圆的周长为:");
		JLabel jl13 = new JLabel("矩形的面积为:");
		JLabel jl14 = new JLabel("矩形的周长为:");
		JLabel jl15 = new JLabel("三角形的面积为:");
		JLabel jl16 = new JLabel("三角形的周长为:");
		JLabel bcg = new JLabel();
		
		//按钮组件
		JButton b1 = new JButton("");
		JButton b2 = new JButton("");
		JButton b3 = new JButton("");
		
		//设置按钮大小
		b1.setBounds(20, 40, 80, 80);
		b2.setBounds(20, 160, 80, 80);
		b3.setBounds(20, 280, 80, 80);
		
		//设置图片大小
		i1.setImage(i1.getImage().getScaledInstance(80, 80, 1000));
		i2.setImage(i2.getImage().getScaledInstance(80, 80, 1000));
		i3.setImage(i3.getImage().getScaledInstance(80, 80, 1000));
		i4.setImage(i4.getImage().getScaledInstance(700, 500, 1000));
		
		//将图片绑定到按钮上
		b1.setIcon(i1);
		b2.setIcon(i2);
		b3.setIcon(i3);
		bcg.setIcon(i4);	//此处是将图片绑定到标签上,用做背景图片
		
		//设置文本框位置及大小
		cr.setBounds(230, 70, 80, 20);
		ra.setBounds(230, 170, 80, 20);
		rb.setBounds(230, 210, 80, 20);
		ta.setBounds(230, 280, 80, 20);
		tb.setBounds(230, 310, 80, 20);
		tc.setBounds(230, 340, 80, 20);
		c_area.setBounds(450, 60, 80, 20);
		c_grith.setBounds(450, 100, 80, 20);
		r_area.setBounds(450, 170, 80, 20);
		r_grith.setBounds(450, 210, 80, 20);
		t_area.setBounds(450, 290, 80, 20);
		t_grith.setBounds(450, 330, 80, 20);
		
		//设置标签位置及大小
		jl1.setBounds(50, 120, 60, 20);
		jl2.setBounds(50, 240, 60, 20);
		jl3.setBounds(40, 360, 60, 20);
		jl4.setBounds(130, 70, 120, 20);
		jl5.setBounds(130, 170, 120, 20);
		jl6.setBounds(130, 210, 120, 20);
		jl8.setBounds(110, 280, 120, 20);
		jl9.setBounds(110, 310, 120, 20);
		jl10.setBounds(110, 340, 120, 20);
		jl11.setBounds(370, 60, 120, 20);
		jl12.setBounds(370, 100, 120, 20);
		jl13.setBounds(360, 170, 120, 20);
		jl14.setBounds(360, 210, 120, 20);
		jl15.setBounds(350, 290, 120, 20);
		jl16.setBounds(350, 330, 120, 20);
		bcg.setBounds(-20, -10, 700, 500);
		
		//将组件加入到容器中
		c.add(b1);
		c.add(b2);
		c.add(b3);
		c.add(cr);
		c.add(ra);
		c.add(rb);
		c.add(ta);
		c.add(tb);
		c.add(tc);
		c.add(c_area);
		c.add(c_grith);
		c.add(r_area);
		c.add(r_grith);
		c.add(t_area);
		c.add(t_grith);
		c.add(jl1);
		c.add(jl2);
		c.add(jl3);
		c.add(jl4);
		c.add(jl5);
		c.add(jl6);
		c.add(jl8);
		c.add(jl9);
		c.add(jl10);
		c.add(jl11);
		c.add(jl12);
		c.add(jl13);
		c.add(jl14);
		c.add(jl15);
		c.add(jl16);
		c.add(bcg);
		
		//动作监听器,为按钮b1添加鼠标单击事件
		b1.addActionListener(new ActionListener() {
   
			public void actionPerformed(ActionEvent arg0) {
   
				Circular circular = new Circular();	//建立圆类对象
				String crs = cr.getText();	//获取文本框cr中的内容
				circular.setR(Double.parseDouble(crs));	//将crs转换成浮点型并赋值给半径
				c_area.setText(String.format("%.6f",circular.Area()));	//求出半径并保留6位小数,再在文本款c_area中显示
				c_grith.setText(String.format("%.6f",circular.Grith()));	//同上
			}
		});
	
		//为按钮b2添加鼠标单击事件
		b2.addActionListener(new ActionListener() {
   
			public void actionPerformed(ActionEvent arg0) {
   
				Rectangle rectangle = new Rectangle();
				String rec_a = ra.getText();
				String rec_b = rb.getText();
				rectangle.seta(Double.parseDouble(rec_a));
				rectangle.setb(Double.parseDouble(rec_b));
				r_area.setText(String.format("%.6f", rectangle.Area()));
				r_grith.setText(String.format("%.6f", rectangle.Grith()));
			}
		});
		
		//为按钮b3添加鼠标单击事件
		b3.addActionListener(new ActionListener() {
   
			public void actionPerformed(ActionEvent arg0) {
   
				Triangle triangle = new Triangle();
				String tri_a = ta.getText();
				String tri_b = tb.getText();
				String tri_c = tc.getText();
				triangle.setA(Double.parseDouble(tri_a));
				triangle.setB(Double.parseDouble(tri_b));
				triangle.setC(Double.parseDouble(tri_c));
				t_area.setText(String.format("%.6f",triangle.Area()));
				t_grith.setText(String.format("%.6f",triangle.Grith()));
			}
		});
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		new polygon();	//实例化
	}

}

完成之后用exe4j生成可执行文件即可

写在最后,关于初学Swing的感谢

对于一个没有了解过swing的小白来说,刚学起来是比较吃力的(天才除外),因为突然就会有大量的知识量涌入你的脑内,但是请不要放弃,你感到头疼是因为你在进步,你在接受新的东西,刚开始学的时候建议多敲代码,多揣摩,多领会,最后祝读到这的你有朝一日成为你想成为的人!谢谢你的观看


转载:https://blog.csdn.net/qq_44888152/article/details/108598027
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场