这是我们学院一个专业老师布置的一个作业,当时没有教图形界面编程,老师让我们自学,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(); //实例化
}
}
对于一个没有了解过swing的小白来说,刚学起来是比较吃力的(天才除外),因为突然就会有大量的知识量涌入你的脑内,但是请不要放弃,你感到头疼是因为你在进步,你在接受新的东西,刚开始学的时候建议多敲代码,多揣摩,多领会,最后祝读到这的你有朝一日成为你想成为的人!谢谢你的观看