翻譯|使用教程|編輯:楊鵬連|2021-02-23 10:38:29.277|閱讀 295 次
概述:在此博客文章中,我們將構(gòu)建圖表庫中用于Java Swing的FunctionSeries,下一節(jié)將向您提供逐步指南,介紹如何從頭開始構(gòu)建該二次方程式圖表。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
MindFusion.Diagramming for WinForms是一個(gè)能幫助你創(chuàng)建工作流和進(jìn)程圖表的.NET控件;數(shù)據(jù)庫實(shí)體關(guān)系圖表;組織圖表;對象層次和關(guān)系圖表;圖表和樹。它是基于對象-圖表框,表格和箭頭類型,將其歸類分派給其他并結(jié)合成復(fù)雜的結(jié)構(gòu)。該控件提供超過預(yù)先定義的50多種圖表框,如自定義設(shè)計(jì)樣式和對圖表框著色等。MindFusion.Diagramming for WinForms現(xiàn)已加入在線訂購,Standard Single Developer版本原價(jià)2848現(xiàn)在搶購立享優(yōu)惠只需2345,立即查看詳情>>
點(diǎn)擊下載MindFusion.Diagramming for WinForms最新試用版
在此博客文章中,我們將構(gòu)建您在下圖中看到的圖表:
下一節(jié)將向您提供逐步指南,介紹如何從頭開始構(gòu)建該二次方程式圖表。
I.項(xiàng)目設(shè)置在您首選的Java IDe中創(chuàng)建一個(gè)新的Java項(xiàng)目,并在項(xiàng)目文件夾中復(fù)制JChart.jar文件。這是包含該庫的* .jar存檔。在我們的示例中,我們已將其復(fù)制到一個(gè)新的子文件夾中,該子文件夾稱為“庫”。JChart.jar在Java Swing的MindFusion Charting試用版的可下載存檔中找到。
我們需要在圖表應(yīng)用程序的構(gòu)建路徑中包含JChart.jar。在Eclipse中,我們通過右鍵單擊項(xiàng)目根文件夾并選擇“屬性-> Java構(gòu)建路徑->添加JAR”來執(zhí)行此操作,然后導(dǎo)航到項(xiàng)目文件夾中JChart.lib的位置:
然后,我們創(chuàng)建一個(gè)新類,將其稱為MainWindow并使它擴(kuò)展JFrame。這將是我們應(yīng)用程序的唯一類,它將啟動它:
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) {{ }} }} }); }); }} }}我們導(dǎo)入將要使用的名稱空間:它們既用于圖表,也用于標(biāo)準(zhǔn)的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;完成之后,我們就可以創(chuàng)建圖表了。
二.折線圖
我們創(chuàng)建LineChart是一個(gè)單獨(dú)的方法,我們將從主類的構(gòu)造函數(shù)中調(diào)用該方法。
private LineChart initializeChart() LineChart initializeChart() {{ LineChart lineChart = new LineChart(); LineChart lineChart = new LineChart(); .................................... .................................... return lineChart;return lineChart; }}我們要呈現(xiàn)的數(shù)學(xué)函數(shù)圖形將通過FunctionSeries類繪制。它的構(gòu)造函數(shù)將定義函數(shù)方程的數(shù)學(xué)表達(dá)式作為字符串。然后,它通過JChart中包含的MindFusion.Scripting庫對其進(jìn)行解析。在我們的例子中,我們創(chuàng)建了兩個(gè)FunctionSeries,它們使用了兩個(gè)不同的二次方程式:
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(); }}請注意,F(xiàn)unctionSeries的構(gòu)造函數(shù)包含在try-catch塊中。如果無法解析方程式,則可以這樣做。在這種情況下,將打印異常,以提供有關(guān)錯(cuò)誤的信息。
提供給FunctionSeries構(gòu)造函數(shù)的其他參數(shù)是:1.要為功能圖計(jì)算的點(diǎn)數(shù);2.計(jì)算間隔的開始;3.計(jì)算間隔結(jié)束。計(jì)算包括開始和結(jié)束值。
接下來,我們獲取用于JFrame的ContentPane,并使用BorderLayout將LineChart擴(kuò)展到它的整個(gè)工作區(qū)域上:
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); }}現(xiàn)在,如果我們運(yùn)行示例,即使沒有樣式,我們也可以看到圖表的圖形:
我們將使用Java圖表庫的眾多樣式功能使圖表在視覺上更具吸引力。
三.樣式表
我們首先使用getXAxis和getYAxis方法來訪問圖表的兩個(gè)主軸并設(shè)置其樣式。
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明確指定間隔,則圖表將對其進(jìn)行計(jì)算,以便最小和最大之間恰好有10個(gè)間隔。我們還使用setTitle指定如何調(diào)用軸。
然后,我們指定圖表的GridType以及渲染網(wǎng)格時(shí)使用的筆觸。我們想要交叉網(wǎng)格:
//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實(shí)例的Title中獲取的圖例標(biāo)簽來繪制圖例。我們想隱藏圖例的標(biāo)題并增加圖例標(biāo)簽的字體。屬性是ShowTitle的LegendRenderer和DataLabelsFontSize。
lineChart.getLegendRenderer().setShowTitle(false);.getLegendRenderer().setShowTitle(false); lineChart.getTheme().setDataLabelsFontSize(12);.getTheme().setDataLabelsFontSize(12);最后,我們需要設(shè)置圖表系列的顏色。有多種樣式可供選擇,但在我們的案例中,我們需要使用單色筆觸對每個(gè)系列進(jìn)行簡單的著色。我們使用CommonSeriesStrokes和CommonSeriesStrokeThicknesses來指定圖形線的顏色和粗細(xì)。我們還將CommonSeriesFills設(shè)置為使用與筆觸相同的畫筆集。我們不需要通過圖表渲染來使用它們,但是圖例將它們用于在系列標(biāo)題之前繪制顏色方塊:
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));這些是圖表應(yīng)用程序的最后幾行代碼。現(xiàn)在,我們有一個(gè)漂亮的二次函數(shù)圖。這是完整的項(xiàng)目源代碼,以及JChart.jar的試用版:
要獲得技術(shù)支持,請使用Java Swing圖表庫的討論區(qū),網(wǎng)址為//mindfusion.eu/Forum/YaBB.pl?board=jchart_dic
關(guān)于適用于Java Swing的MindFusion圖表和規(guī)格庫:這是一個(gè)本機(jī)Java Swing庫,適用于繪制多種圖表和規(guī)格。靈活的API允許組合各種圖表部分:軸,圖和系列,以創(chuàng)建適合任何業(yè)務(wù)應(yīng)用程序特定需求的獨(dú)特圖表:具有多個(gè)圖的圖表,四面八方的軸,在一個(gè)圖中的不同圖表圖形等等。所有圖表系列都來自基本的“系列”接口,程序員可以將其實(shí)現(xiàn)以創(chuàng)建自己的系列類。外觀由主題控制,圖表外觀可自定義。量具庫是圖表控件的一部分,并提供一組橢圓形和線性量具,可用于創(chuàng)建任何類型的量具(圓形或矩形量具),最多具有三個(gè)量尺。該庫隨附了一組預(yù)定義的流行儀表:指南針,時(shí)鐘,溫度計(jì)等。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: