MindFusion .NET控制元件教程:Charting for Java Swing中的FunctionSeries

roffey發表於2021-02-25

MindFusion.Diagramming for WinForms是一個能幫助你建立工作流和程式圖表的.NET控制元件;資料庫實體關係圖表;組織圖表;物件層次和關係圖表;圖表和樹。它是基於物件-圖表框,表格和箭頭型別,將其歸類分派給其他並結合成複雜的結構。該控制元件提供超過預先定義的50多種圖表框,如自定義設計樣式和對圖表框著色等。

在此部落格文章中,我們將構建您在下圖中看到的圖表:

MindFusion .NET控制元件教程: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的位置:

MindFusion .NET控制元件教程:Charting for Java Swing中的FunctionSeries

然後,我們建立一個新類,將其稱為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);
}}

現在,如果我們執行示例,即使沒有樣式,我們也可以看到圖表的圖形:

MindFusion .NET控制元件教程:Charting for Java Swing中的FunctionSeries

我們將使用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圖表庫的討論區,網址為

關於適用於Java Swing的MindFusion圖表和規格庫:這是一個本機Java Swing庫,適用於繪製多種圖表和規格。靈活的API允許組合各種圖表部分:軸,圖和系列,以建立適合任何業務應用程式特定需求的獨特圖表:具有多個圖的圖表,四面八方的軸,在一個圖中的不同圖表圖形等等。所有圖表系列都來自基本的“系列”介面,程式設計師可以將其實現以建立自己的系列類。外觀由主題控制,圖表外觀可自定義。量具庫是圖表控制元件的一部分,並提供一組橢圓形和線性量具,可用於建立任何型別的量具(圓形或矩形量具),最多具有三個量尺。該庫隨附了一組預定義的流行儀表:指南針,時鐘,溫度計等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995027/viewspace-2759335/,如需轉載,請註明出處,否則將追究法律責任。

相關文章