java解二次方程函数_Charting for Java Swing中的FunctionSeries
在此博客文章中,我们将构建您在下图中看到的图表:
下一节将向您提供逐步指南,介绍如何从头开始构建该二次方程式图表。
I.项目设置
在您首选的Java IDe中创建一个新的Java项目,并在项目文件夹中复制JChart.jar文件。这是包含该库的* .jar存档。在我们的示例中,我们已将其复制到一个新的子文件夹中,该子文件夹称为“库”。JChart.jar在Java Swing的MindFusion Charting试用版的可下载存档中找到。
我们需要在图表应用程序的构建路径中包含JChart.jar。在Eclipse中,我们通过右键单击项目根文件夹并选择“属性-> Java构建路径->添加JAR”来执行此操作,然后导航到项目文件夹中JChart.lib的位置:
然后,我们创建一个新类,将其称为MainWindow并使它扩展JFrame。这将是我们应用程序的唯一类,它将启动它:
public class MainWindow extends JFrame class MainWindow extends JFrame
{{
private static final long serialVersionUID = 1L;private static final long serialVersionUID = 1L;
//the main method of the application//the main method of the application
public static void main(String[] args)public static void main(String[] args)
{{
SwingUtilities.invokeLater(new Runnable()SwingUtilities.invokeLater(new Runnable()
{{
public void run()public void run()
{{
trytry
{{
new MainWindow().setVisible(true);new MainWindow().setVisible(true);
}}
catch (Exception exp)catch (Exception exp)
{{
}}
}}
}); });
}}
}}
我们导入将要使用的名称空间:它们既用于图表,也用于标准的AWT和Swing名称空间:
import java.awt.BorderLayout; java.awt.BorderLayout;
import java.awt.Color;import java.awt.Color;
import java.util.Arrays;import java.util.Arrays;
import javax.swing.JFrame;import javax.swing.JFrame;
import javax.swing.SwingUtilities;import javax.swing.SwingUtilities;
import com.mindfusion.charting.FunctionSeries;import com.mindfusion.charting.FunctionSeries;
import com.mindfusion.charting.GridType;import com.mindfusion.charting.GridType;
import com.mindfusion.charting.swing.LineChart;import com.mindfusion.charting.swing.LineChart;
import com.mindfusion.drawing.Brushes;import com.mindfusion.drawing.Brushes;
import com.mindfusion.drawing.DashStyle;import com.mindfusion.drawing.DashStyle;
import com.mindfusion.drawing.SolidBrush;import com.mindfusion.drawing.SolidBrush;
完成之后,我们就可以创建图表了。
二.折线图
我们创建LineChart是一个单独的方法,我们将从主类的构造函数中调用该方法。
private LineChart initializeChart() LineChart initializeChart()
{{
LineChart lineChart = new LineChart(); LineChart lineChart = new LineChart();
....................................
....................................
return lineChart;return lineChart;
}}
我们要呈现的数学函数图形将通过FunctionSeries类绘制。它的构造函数将定义函数方程的数学表达式作为字符串。然后,它通过JChart中包含的MindFusion.Scripting库对其进行解析。在我们的例子中,我们创建了两个FunctionSeries,它们使用了两个不同的二次方程式:
FunctionSeries series1; series1;
FunctionSeries series2; FunctionSeries series2;
trytry
{ {
series1 = new FunctionSeries(= new FunctionSeries(
"3*x*x+2*x+2", 1000, -5, 5 );"3*x*x+2*x+2", 1000, -5, 5 );
series1.setTitle("Quadratic equation: 3*x*x+2*x+2");.setTitle("Quadratic equation: 3*x*x+2*x+2");
lineChart.getSeries().add(series1);.getSeries().add(series1);
//mean value is -2//mean value is -2
series2 = new FunctionSeries(= new FunctionSeries(
"-3*x*x+4*x+1", 1000, -5, 5);"-3*x*x+4*x+1", 1000, -5, 5);
series2.setTitle("Quadratic equation: -3*x*x+4*x+1");.setTitle("Quadratic equation: -3*x*x+4*x+1");
lineChart.getSeries().add(series2);.getSeries().add(series2);
}}
catch (Exception e)catch (Exception e)
{{
// could not parse the expression// could not parse the expression
e.printStackTrace();.printStackTrace();
}}
请注意,FunctionSeries的构造函数包含在try-catch块中。如果无法解析方程式,则可以这样做。在这种情况下,将打印异常,以提供有关错误的信息。
提供给FunctionSeries构造函数的其他参数是:1.要为功能图计算的点数;2.计算间隔的开始;3.计算间隔结束。计算包括开始和结束值。
接下来,我们获取用于JFrame的ContentPane,并使用BorderLayout将LineChart扩展到它的整个工作区域上:
protected MainWindow() MainWindow()
{{
setDefaultCloseOperation(EXIT_ON_CLOSE);(EXIT_ON_CLOSE);
setSize(650, 400);(650, 400);
setTitle("Java Swing Library for Charts and Gauges: FunctionSeries"); ("Java Swing Library for Charts and Gauges: FunctionSeries");
//add the chart to the ContentPane//add the chart to the ContentPane
getContentPane().add(initializeChart(), BorderLayout.CENTER);().add(initializeChart(), BorderLayout.CENTER);
}}
现在,如果我们运行示例,即使没有样式,我们也可以看到图表的图形:
我们将使用Java图表库的众多样式功能使图表在视觉上更具吸引力。
三.样式表
我们首先使用getXAxis和getYAxis方法来访问图表的两个主轴并设置其样式。
lineChart.getXAxis().setMinValue(-5.0);.getXAxis().setMinValue(-5.0);
lineChart.getXAxis().setMaxValue(5.0);.getXAxis().setMaxValue(5.0);
lineChart.getXAxis().setInterval(0.5);.getXAxis().setInterval(0.5);
lineChart.getXAxis().setOrigin(0.0);.getXAxis().setOrigin(0.0);
lineChart.getXAxis().setTitle("X-axis");.getXAxis().setTitle("X-axis");
lineChart.getYAxis().setMaxValue(30.0);.getYAxis().setMaxValue(30.0);
lineChart.getYAxis().setMinValue(-30.0);.getYAxis().setMinValue(-30.0);
lineChart.getYAxis().setTitle("Y-axis");.getYAxis().setTitle("Y-axis");
我们使用setMinValue和setMaxValue方法指定轴的两端。如果我们未使用setInterval明确指定间隔,则图表将对其进行计算,以便最小和最大之间恰好有10个间隔。我们还使用setTitle指定如何调用轴。
然后,我们指定图表的GridType以及渲染网格时使用的笔触。我们想要交叉网格:
//styling the grid
lineChart.setGridType(GridType.Crossed);.setGridType(GridType.Crossed);
lineChart.getTheme().setGridLineColor(new Color(192, 192, 192));.getTheme().setGridLineColor(new Color(192, 192, 192));
lineChart.getTheme().setGridLineStyle(DashStyle.Dot);.getTheme().setGridLineStyle(DashStyle.Dot);
defaut使用从图表的Series实例的Title中获取的图例标签来绘制图例。我们想隐藏图例的标题并增加图例标签的字体。属性是ShowTitle的LegendRenderer和DataLabelsFontSize。
lineChart.getLegendRenderer().setShowTitle(false);.getLegendRenderer().setShowTitle(false);
lineChart.getTheme().setDataLabelsFontSize(12);.getTheme().setDataLabelsFontSize(12);
最后,我们需要设置图表系列的颜色。有多种样式可供选择,但在我们的案例中,我们需要使用单色笔触对每个系列进行简单的着色。我们使用CommonSeriesStrokes和CommonSeriesStrokeThicknesses来指定图形线的颜色和粗细。我们还将CommonSeriesFills设置为使用与笔触相同的画笔集。我们不需要通过图表渲染来使用它们,但是图例将它们用于在系列标题之前绘制颜色方块:
lineChart.getTheme().setHighlightStroke(Brushes.Orange);.getTheme().setHighlightStroke(Brushes.Orange);
lineChart.getTheme().setCommonSeriesStrokes(.getTheme().setCommonSeriesStrokes(
Arrays.asList(Arrays.asList(
new SolidBrush( new Color (90, 116, 68 )),new SolidBrush( new Color (90, 116, 68 )),
new SolidBrush( new Color (70, 105, 125))));new SolidBrush( new Color (70, 105, 125))));
lineChart.getTheme().setCommonSeriesFills(.getTheme().setCommonSeriesFills(
Arrays.asList(Arrays.asList(
new SolidBrush( new Color (90, 116, 68 )),new SolidBrush( new Color (90, 116, 68 )),
new SolidBrush( new Color (70, 105, 125))));new SolidBrush( new Color (70, 105, 125))));
lineChart.getTheme().setCommonSeriesStrokeThicknesses(.getTheme().setCommonSeriesStrokeThicknesses(
Arrays.asList(3.0));Arrays.asList(3.0));
这些是图表应用程序的最后几行代码。现在,我们有一个漂亮的二次函数图。这是完整的项目源代码,以及JChart.jar的试用版:
要获得技术支持,请使用Java Swing图表库的讨论区,网址为https://mindfusion.eu/Forum/YaBB.pl?board=jchart_dic
关于适用于Java Swing的MindFusion图表和规格库:这是一个本机Java Swing库,适用于绘制多种图表和规格。灵活的API允许组合各种图表部分:轴,图和系列,以创建适合任何业务应用程序特定需求的独特图表:具有多个图的图表,四面八方的轴,在一个图中的不同图表图形等等。所有图表系列都来自基本的“系列”接口,程序员可以将其实现以创建自己的系列类。外观由主题控制,图表外观可自定义。量具库是图表控件的一部分,并提供一组椭圆形和线性量具,可用于创建任何类型的量具(圆形或矩形量具),最多具有三个量尺。该库随附了一组预定义的流行仪表:指南针,时钟,温度计等。
想要购买该产品正版授权请点击【商城购买】,想了解更多产品信息请点击【咨询在线客服】
java解二次方程函数_Charting for Java Swing中的FunctionSeries相关推荐
- java一元二次方程求解_求JAVA解一元二次方程的程序。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public class Test2 { //如果要求条件多,那就自己加上就行了.这里不过a == 0或者b ==0情况.自己可以加上 public st ...
- java调用javascript函数_使用Java程序中的参数调用Javascript函数
我有Java Swing应用程序.当用户点击MenuItem时,我想使用JavaScript在HTML页面上显示图形. Java代码: if(e.getActionCommand().equals(& ...
- MindFusion教程:Charting for Java Swing中的FunctionSeries
MindFusion.Diagramming for WinForms是一个能帮助你创建工作流和进程图表的.NET控件:数据库实体关系图表:组织图表:对象层次和关系图表:图表和树.它是基于对象-图表框 ...
- java解压服务器文件夹,java获取远程服务器上的文件夹
java获取远程服务器上的文件夹 内容精选 换一换 安装X722板载网卡驱动软件包,使裸金属服务器支持在v5服务器上下发.其他类型服务器可跳过此步骤.本文以Windows Server 2016为例, ...
- java socket 回调函数_请问Java网络编程如何在不使用多线程的情况下实现异步返回?...
我指的是在不使用多线程的情况下进行并发处理 具体的情况是,在不使用多线程的情况下,服务器侦听某个端口,在有连接进来的时候会调用某个函数对此连接进行处理,但是由于处理的过程可能会比较长,为了不让后面连接 ...
- Java dectobin(n)函数_浙大JAVA实验题答案09answer.docx
实验9-1 Method的使用(二) 程序填空题,不要改变与输入输出有关的语句. 50010十进制转换二进制 输入一个正整数repeat (0 输入1个正整数n,将其转换为二进制后输岀. 要求定义并调 ...
- jni开发-java调用c函数,c调用java函数实现
1.配置 下载ndk,cmake即可. 2.实现 MainActivity的实现 public class MainActivity extends AppCompatActivity {// Use ...
- java确认对话框否_如何在Swing中显示是/否和取消选项的确认对话框?
下面的示例展示如何在基于swing的应用程序中显示带有是,否和取消选项的确认对话框. 使用以下API - JOptionPane - 创建标准对话框. JOptionPane.showConfirmD ...
- java当前时间函数_在JAVA中如何获取当前日期
一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat; public class NowStri ...
- java 控件换行_Java – 如何在swing中添加换行符
我正在为我的迷你游戏添加一个按钮,但我不知道如何换行.我想在按钮和文本之间有一个空格,这里是代码: JPanel panel1 = new JPanel(); JLabel label1 = new ...
最新文章
- Android架构思考(模块化、多进程)
- Linux内核分析--操作系统是如何工作的
- ThreadLocal怎么实现线程隔离的?可见性问题?为什么要重新定义一个threadLocalHashCode?为什么有内存泄露?弱引用又是什么?
- 关于Docker COPY指令只能使用相对路径的说明
- 【Qt】Visual Studio中无法打开Qt中UI文件
- 图像坐标:我想和世界坐标谈谈(B)
- linux6.5安装oracle,linux [CentOS 6.5]下安装oracle
- sybase函数学习(八)
- Java基础02 位运算符<<、>>
- 6.Composer实现PHP中类的自动加载
- centos8 用u盘安装失败_CentOS 8 安装图解
- Excel VBA函数和过程调用方法总结(跨文件调用函数和过程)
- 【硬件驱动系列】DirectSound vs ASIO
- jeston nano bo1卡槽坏了,不能锁住tf卡,维修方法
- python微信推送{u‘errcode‘: 40008, u‘errmsg‘: u‘invalid message type rid: 6111061f-19703d5b
- 在pycharm内给自己的代码设置签名,附加时间
- Hijack攻击揭秘
- Renovate - preview
- LaTeX 多图 排列
- vue:基础:生命周期
热门文章
- Excel数据分析入门-数据透视表
- 远程桌面不能复制粘贴解决办法
- PM2.5的加重,和建筑工地关系大不大?(附扬尘治理方案)
- 过QQ游戏大厅的SX保护 - Evil0r's Blog - 博客频道 - CSDN_NET
- tableau之企业经营分析看版设计
- 基于SSM的概念可视化程序设计学习系统毕业设计源码021009
- 新年新气象,90行代码菜鸟用Python制作小姐姐新年日历天气卡,送人太有面子啦!...
- linux小企鹅输入法无法使用,助:小企鹅输入法安装成功,但无法使用!!!!先谢谢大家了!!...
- 【NISP一级】考前必刷九套卷(九)
- windows系统C盘pagefile.sys占用空间大怎么解决