Java实现规则几何图形的绘制与周长面积计算详解

目录
  • 1.背景
  • 2.开发工具
  • 3.数据存储设计
  • 4.项目功能设计
  • 5.部分代码展示
  • 6.项目结构
  • 7.总结

1.背景

规则几何图形问题求解的程序是对根据输入规则几何图形的一些特定的参数来实现对规则几何图形的面积和周长求解,以及根据输入的参数对对他们进行绘制相应的图形。

在程序中通过规则几何的类型来输入相应的参数有程序得到相应的解和图形。这从而达到了对图形的计算便利计算和直观的求出图形,从而帮助计算人员拥有更高的计算效率。

关键字:Java,swing,规则几何图形,文件操作

2.开发工具

本程序开发使用的IDE是idea!

3.数据存储设计

1.程序采用文件流操作将数据存储到.txt文件中,文件的路径是d:\\xxx.txt。

2.文件中存储了基本的数据,包括输入的规则几何图形的长宽高等数据,还包括计算得到的面积周长等数据!例如:

4.项目功能设计

在程序中,可以实现已经添加的几何图形的面积和周长的求解,绘制它们相应的图形和改变其形状,线条的粗细和颜色。根据提示,我们可以输入相关特征的参数去求解除它们的面积、周长以及改变它们的参数,也可以根据提示去改变各边的线条的粗细和颜色。

在规则几何问题求解中系统主要有Main程序、Triangleplay程序、 Rectangleplay程序、Squareplay程序、Circleplay程序、Rhombusplay程序、Trapezoidplay程序、Trapezoidequilateral程序和Trapezoidright程序。

5.部分代码展示

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;

public class Circleplay {
    public static void main(String args[]){
        WindowCircle circleplay = new WindowCircle();
        circleplay.setTitle("几何图形计算");
        circleplay.setSize(500,300);
        circleplay.setLocation(500,250);
    }
}

class WindowCircle extends JFrame {
    Circle circle; // 数据对象
    JTextField textA, textB, textC; // 数据对象的视图
    JTextArea showArea; // 数据对象的视图
    JButton controlButton1; // 控制器对象
    JButton controlButton2;

    WindowCircle() {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    }

    void init() {
        circle = new Circle();
        textA = new JTextField(5);
        textB = new JTextField(5);
        showArea = new JTextArea();
        controlButton1 = new JButton("计算");
        controlButton2 = new JButton("退出");
        JPanel pNorth = new JPanel();
        JPanel pNorth1 = new JPanel();

        pNorth.add(new JLabel("半径"));
        pNorth.add(textA);
        pNorth.add(controlButton1);
        pNorth.add(controlButton2);
        pNorth.setLocation(250,250);

        pNorth1.add(new JLabel("图形线条粗细"));
        String[] s1 = new String[]{"1","2","3","4","5","6","7","8","9"};
        final JComboBox<String> comboBox1 = new JComboBox<String>(s1);
        pNorth1.add(comboBox1);

        pNorth1.add(new JLabel("图形线条颜色"));
        String[] s2 = new String[]{"黑色","红色","灰色","蓝色","黄色","绿色","紫色"};
        final JComboBox<String> comboBox2 = new JComboBox<String>(s2);
        pNorth1.add(comboBox2);

        add(pNorth, BorderLayout.NORTH);
        pNorth1.setPreferredSize(new Dimension(90,150));
        add(pNorth1, BorderLayout.WEST);
        add(new JScrollPane(showArea), BorderLayout.CENTER);

        controlButton1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                try {
                    double a = Double.parseDouble(textA.getText().trim()); //
                    circle.setA(a); // 更新数据
                    circle.paint();
                    String area1 = circle.getlength();
                    String area2 = circle.getArea();
                    showArea.append("半径为"+a+"的圆"+"	 "+"周长为:" +area1+"	"+"面积为:"+area2+"\n");
                } catch (Exception ex) {
                    showArea.append("\n" + ex + "\n");
                }
            }});

        controlButton2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                dispose();
            }});

        comboBox1.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    circle.Line(comboBox1.getSelectedIndex()+1);
                    circle.paint();
                }
            }});

        comboBox2.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    circle.Colour(comboBox2.getSelectedIndex()+1);
                    circle.paint();
                }
            }});

    }}

class Circle {

    FileWriter dout;
    double sideA, sideB, area,p;
    int line = 1,colournumber = 1;

    public void setA(double a) {
        sideA = a;

    }

    public String getArea() {

        area = 3.14*sideA*sideA;
        return String.valueOf(area); // Double.toString(area)

    }
    public String getlength() {

        p = 3.14 * sideA;
        return String.valueOf(p);

    }

    public void Line(int line)
    {
        this.line = line;

    }

    public void Colour(int colournumber)
    {
        this.colournumber = colournumber;

    }

    public void paint(){

        try{
            dout = new FileWriter("d:\\Circle.txt");

        }catch(IOException e){}

        JFrame jFrame = new JFrame("圆的图形");
        // 创建画板
        JPanel jpanel = new JPanel() {

            public void paint(Graphics graphics) {
                // 必须先调用父类的paint方法
                super.paint(graphics);

                Graphics2D g=(Graphics2D)  graphics.create();
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                if(colournumber == 1)
                    g.setColor(Color.BLACK);
                else if(colournumber == 2)
                    g.setColor(Color.RED);
                else if(colournumber == 3)
                    g.setColor(Color.GRAY);
                else if(colournumber == 4)
                    g.setColor(Color.BLUE);
                else if(colournumber == 5)
                    g.setColor(Color.YELLOW);
                else if(colournumber == 6)
                    g.setColor(Color.GREEN);
                else if(colournumber == 7)
                    g.setColor(Color.magenta);

                if(line == 1){
                    try{
                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 2){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 3){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 4){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 5){
                    try{

                        dout.write("长方形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 6){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 7){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 8){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 9){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(colournumber == 1)
                {
                    g.setColor(Color.BLACK);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("黑色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 2)
                {
                    g.setColor(Color.RED);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("红色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 3)
                {

                    g.setColor(Color.GRAY);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("灰色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 4)

                {
                    g.setColor(Color.BLUE);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("蓝色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 5)
                {
                    g.setColor(Color.YELLOW);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("黄色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 6)
                {
                    g.setColor(Color.GREEN);
                    try{

                        dout.write("圆形颜色为");
                        dout.write("绿色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 7)
                {
                    g.setColor(Color.magenta);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("紫色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                Stroke stroke=new BasicStroke(line);
                g.setStroke(stroke);

                DecimalFormat df = new DecimalFormat("######0");
                String str1 = df.format(sideA);
                int a = Integer.parseInt(str1);

                g.drawOval(100, 50, a*10,a*10);

                try{
                    dout.write("圆形半径为");
                    dout.write(String.valueOf(a));
                    dout.write(" \r\n");
                    dout.write("圆形周长为");
                    dout.write(String.valueOf(p));
                    dout.write(" \r\n");
                    dout.write("圆形面积为");
                    dout.write(String.valueOf(area));
                    dout.write(" \r\n");
                    dout.close();
                }catch(IOException exa){}

            }

        };

        jFrame.add(jpanel);
        // 设置画框大小(宽度,高度),默认都为0
        jFrame.setSize(300, 300);
        // 将画框展示出来。true设置可见,默认为false隐藏
        jFrame.setVisible(true);
        jFrame.setLocation(1000,250);
    }
}

6.项目结构

以下是项目结构的展示:

7.总结

规则几何图形求解根据图形的某些特征设置输入参数,根据这些参数来计算相应图形的面积和周长。在绘制图形方面,是根据所输入的参数来确定坐标,再连接坐标形成的图形。在改变图形方面,用绘图的类去改变图形。

这个程序适合在新手学习完Java基础知识以后练习,可以加深对Java编程的理解,同时对Java流的操作这一个抽象的概念有了更加深入的理解,学习完GUI技术不仅提升了编程兴趣,同时为Java下一阶段的学习奠定了基础。

以上就是Java实现规则几何图形的绘制与周长面积计算详解的详细内容,更多关于Java几何图形绘制 计算的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java计算几何图形面积的实例代码

    对于每个几何图形而言,都有一些共同的属性,如名字.面积等,而其计算面积的方法却各不相同.为了简化开发,请编写程序,定义一个超类来实现输入名字的方法,并使用抽象方法来计算面积. 思路分析: 所谓超类就是抽象父类,该抽象类中有两个方法,分别用来获取图形的名称和图形的面积.要获得图形的名称,通过类的getClass().getSimpleName()方法可以实现:要获得图形的面积,因为计算面积的方法各不相同,所以该方法是个抽象方法.定义一个子类表示圆形,圆形的半径通过构造方法获得,圆形的面积通过重写超

  • Java如何在PPT中绘制图形

    Microsoft PowerPoint可支持在幻灯片中插入各种类型的图形并且可设置图形填充.线条颜色.图形大小.位置等.下面将通过Java编程来演示在PPT中绘制图形的方法. 工具:Free Spire.Presentation for Java Jar文件导入方法1:通过官网下载. Step1:在程序中新建一个Directory目录并命名为lib:并将控件包中的Spire.Presentation.jar(可在解压控件包下的lib文件中获取)直接复制该目录下. Step2: 选中复制后的Sp

  • Java OpenCV图像处理之图形与文字绘制

    目录 前言 核心代码 效果图 前言 代码地址 序號 名稱 方法 1 圖像 添加文字 Imgproc.putText 2 圖像 畫直綫 Imgproc.line 3 圖像 畫橢圓 Imgproc.ellipse 4 圖像 畫矩形 Imgproc.rectangle 5 圖像 畫園 Imgproc.circle 6 圖像 填充 Imgproc.fillConvexPoly 核心代码 package com.xu.opencv.canva; import java.io.File; import ja

  • Java实现规则几何图形的绘制与周长面积计算详解

    目录 1.背景 2.开发工具 3.数据存储设计 4.项目功能设计 5.部分代码展示 6.项目结构 7.总结 1.背景 规则几何图形问题求解的程序是对根据输入规则几何图形的一些特定的参数来实现对规则几何图形的面积和周长求解,以及根据输入的参数对对他们进行绘制相应的图形. 在程序中通过规则几何的类型来输入相应的参数有程序得到相应的解和图形.这从而达到了对图形的计算便利计算和直观的求出图形,从而帮助计算人员拥有更高的计算效率. 关键字:Java,swing,规则几何图形,文件操作 2.开发工具 本程序

  • java设计模式七大原则之开闭原则示例详解

    目录 1.什么是开闭原则? 2.违反Ocp代码案例 3.遵守Ocp代码案例 1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则.一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框架,用实现扩展细节.当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化.编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则. 2.违反Ocp代码案例 package com.

  • Java中的引用和动态代理的实现详解

    我们知道,动态代理(这里指JDK的动态代理)与静态代理的区别在于,其真实的代理类是动态生成的.但具体是怎么生成,生成的代理类包含了哪些内容,以什么形式存在,它为什么一定要以接口为基础? 如果去看动态代理的源代码(java.lang.reflect.Proxy),会发现其原理很简单(真正二进制类文件的生成是在本地方法中完成,源代码中没有),但其中用到了一个缓冲类java.lang.reflect.WeakCache<ClassLoader,Class<?>[],Class<?>

  • Java入门绊脚石之Override和Overload的区别详解

    目录 前言: 一.方法重写(Override) 1.方法重写基本概念 2.方法重写基本规则及注意事项 二.overload方法重载 1.什么是重载 2.重载的规则 3.总结: 前言: 各位小伙伴们,大家好,一日不见,如隔一日,今天我给大家分享一下大家在学习java过程当中遇到的一个问题,也是一道面试题,java中,Override和Overload的区别. 一.方法重写(Override) 1.方法重写基本概念 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即

  • java zxing合成复杂二维码图片示例详解

    目录 说明: 整体思路: 图片合成四部曲 踩过的坑 说明: 最近接到需要将二维码合成复杂图片的需求,要求给二维码上下或者左侧添加相关文字描述,技术没有难点,整理本文主要记录思路和踩过的坑. 整体思路: 引入zxing成熟的二维码生成接口,生成标准二维码文件,通过java图形图像处理API为二维码添加相关文字描述,根据需要,可以为合成后的图片添加相关背景.示例如下图所示: 1.先拿点位图来说,生成二维码图片核心代码如下 /** * 定义二维码的参数 */ HashMap<EncodeHintTyp

  • Java实现添加条形码到PDF表格的方法详解

    目录 程序环境 代码示例 条码的应用已深入生活和工作的方方面面.在处理条码时,常需要和各种文档格式相结合.当需要在文档中插入.编辑或者删除条码时,可借助于一些专业的类库工具来实现.本文,以操作PDF文件为例,介绍如何在编辑表格时,向单元格中添加条形码. 程序环境 本次功能测试中,使用 Free Spire.PDF for Java. 实现功能的大致思路:生成条形码,将条形码保存为图片,然后在PDF中的表格单元格中插入条码图片. Spire.PDF for Java 中的Spire.Pdf.Bar

  • Java使用connectTo方法提高代码可续性详解

    目录 关于可读性的一些想法 整理connectTo方法 源代码有两种不同的用户:程序员和计算机.一方面,计算机既能处理干净.结构良好的代码,也能处理混乱的代码.另一方面,程序员对代码的可读性很敏感.甚至是代码中的空白.正确使用缩进(这与计算机完全无关)也决定了代码容易理解或难以理解. 此外,代码的可读性也提高了可靠性,因为通常不容易隐藏一些bug.并且提高了可维护性,因为它更容易修改. 关于可读性的一些想法 编写可读的代码是一门被低估的技术,学校很少教授这种技术,但它却与软件的可靠性.维护和发展

  • IOS 中CALayer绘制图片的实例详解

    IOS 中CALayer绘制图片的实例详解 CALayer渲染内容图层.与UIImageView相比,不具有事件响应功能,且UIImageView是管理内容. 注意事项:如何使用delegate对象执行代理方法进行绘制,切记需要将delegate设置为nil,否则会导致异常crash. CALayer绘制图片与线条效果图: 代码示例: CGPoint position = CGPointMake(160.0, 200.0); CGRect bounds = CGRectMake(0.0, 0.0

  • java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData(); 二. 方法getTables的用法 原型: ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type

  • java 三种将list转换为map的方法详解

    java 三种将list转换为map的方法详解 在本文中,介绍三种将list转换为map的方法: 1) 传统方法 假设有某个类如下 class Movie { private Integer rank; private String description; public Movie(Integer rank, String description) { super(); this.rank = rank; this.description = description; } public Int

随机推荐