Jasperreport基本介绍(Jasperreport与Ireport介绍)

Jasperreport基本介绍

Jasperreport与Ireport介绍

Jasperreport是报表打印工具,支持pdf、csv多种格式的报表打印。

JasperReport是一个开源的工具包,将JasperReport包加入到项目的classpath中即可开始使用JasperReport包了,从java程序中通过调用包中的类对jrxml文件进行操作,可以完成报表的编译、显示、输出等工作;

Jasperreport的报表生成过程,如下图。

如上图所示。报表模板有两种制作方式:

1)利用ireport图形编辑工具,iReport是报表编辑图形工具,编辑完成后输出jrxml文件(XML格式), 生成jasper文件(以.jasper结尾);

2)直接利用java代码编译生成jasper文件(以.jasper结尾)。

最终要使用的是编译后的*.jasper文件。

Jasperreport支持多种数据源,包括xml、数据库、JavaBean等多种数据源。

Jasperreport基本类

l  net.sf.jasperreports.engine.JasperCompileManager类。

使用这个类的几个静态方法即可完成对报表的编译工作(具体参见api文档)

编译完成后可以JasperCompileManager有两种处理方式:

1> 返回一个JasperReport对象

2> 在.jrxml文件所在的目录生成一个.jasper文件

这两种方式是由程序员自己选择的。不过我比较倾向使用.jasper文件,毕竟报表的结构不是每天都在改动,所以每次重新编译报表并不是很划算。

l  net.sf.jasperreports.engine.JasperFillManager类

这个类的作用是用数据填充报表。它可以使用JasperReport对象也可以使用。jasper文件做为报表模板。

它同样有2中处理方式:

1> 返回一个JsaperPrint对象。

2> 在.jasper文件所在目录生成一个.jrprint文件

这个类使用net.sf.jasperreports.engine.JRDataSource接口的实现做为数据源。任何实现了JRDataSource的类均可做为数据源使用

在net.sf.jasperreports.engine.data包中定义了一些数据源,可根据自己的需要选择。这里我使用的是JRTableModelDataSource做为

l  3. net.sf.jasperreports.engine.JasperPrintManager和

net.sf.jasperreports.engine.JasperExportManager这两个类的作用是打印、导出报表他们使用 JasperPrint 和 .jrprint文件做为输入。

Jasperreport实例演示

少说废话,下面我们就进行一些基本的演示。在下才疏学浅,在调查中只做了三种尝试:1)利用ireport进行模板设计,数据源采用xml文件;

2)利用ireport设计模板,导入jfreechat对象;

3)使用java代码设计模板,数据源为对象数组。

下面我们逐一进行讲解。OK,let’s go!!!!

Ireport设计模板,xml数据源

1) 安装ireport。

直接点击Windows版本ireport安装文件,安装文件中已经包含了jasperreport组件,这里不做表述,有问题问百度!

2) 打开ireport

Ireport 3.7.4用户界面如图所示。

客官您瞧见,用户界面上的“Quick start”没?按照图中表示的1、2、3去做,就基本能搞清楚ireport是什么道道!

3) 添加数据源

点击标号①,界面如下:

哇塞,这么多数据源,看来真的是很好很强大耶。我们选择“xml file datasource”,点击next,

按照上图填入数据源名称、以及数据源xml文件,注意一定要选择“Use the report Xpath expression when filling the report”.点击“save” 即可,在下图标记处会出现相应的生成结果。

现在让我们先查看一下,刚刚添加xml数据源的具体结构:

数据源准备好了,可以开始模板创建了。

4) 创建模板

在上图中点击“②”,出现下图。

点击“Launch report wizard”,如下图:

输入报表名以及保存路径,点击“下一步”

在“Connections/Data sources”中选择你需要的数据源。接下来就直接点击“下一步”,直到完成。

点击完成后,进入模板元素设计页面。

图中,左边标记为页面监视器(report inspector),右边为组件工具栏。若客官您在使用的过程中,不小心关闭了这些窗口,您可以在菜单栏“窗口”中找到,点击之后,该窗口就会出现了。

5) 添加元素

在组件工具栏中选择组件,直接拖拽到模板中。

点击图中红色标记,进入如下图:

将图中标记的“Customers”拖拽到下方的标记处,此处的作用就是要将数据源中的数据字段添加要ireport中,以便下一步为刚刚建立的“Field”元素指定,查询语句。如下图。

点击OK即可。

再右击Field元素,点击“Edit Expression”,如图:

将Field括号内的改成您需要的字段如“CompanyName”。点击“Apply”

做到这一步,您可能觉得“应该该做了都做完了,可以进行预览了!”,其实我也这么想的,也这么做的,可是,预览报错,经过研究,我还是少做了一步,而这一步至关重要,就是我们没有选择xml文件中的数据list节点。

您必须要按照如上图所做,输入Query语句。

好了,这下我们就可以预览了。

6) 预览报表

点击“preview”按钮就成,让我们看看效果吧:

呵呵,丑是丑了点,但是这是我们头一回用ireport,还是很有成就感的。

ireport设计模板,导入jfreechat对象

JasperReport在用数据填充报表时,根据图形报表的类型,生成对应的JFreeChart的Dataset对象,再调用org.jfree.chart.ChartFactory产生出对应的org.jfree.chart.JFreeChart对象。获取到该对象后,JasperReport在exporter里建立一个java.awt.image.BufferedImage对象,

BufferedImage返回一个java.awt.Graphics2D对象,再将它传入给之前JFreeChart对象,最后调用JFreeChart对象的draw方法将图形输出到BufferedImage对象,供给Exporter使用。

在介绍导入jfreechat对象之前,我们现在讨论一个东西,这个东西很有用,叫scriptlet---脚本语言,听过吧,我们把生成jfreechat对象的java代码放在报表模板的脚本里,在编译模板时,连同脚本一起编译进去。

jasperReport也是支持scriptlet的哦,先分析一下JasperReport的API吧!在填充报表时scriplet是一个非常有力的工具,

JRAbstractScriptlet.java位于net.sf.jasperreports.engine包下是一个抽象类

beforeReportInit()

afterReportInit()

beforePageInit()

afterPageInit()

beforeColumnInit()

afterColumnInit()

beforeGroupInit(String groujpame)

afterGroupInit(String groujpame)

看看这些名字就知道你能完成那些功能,这几个方法是要求我们实现的,jasperReport给我们提供了一个实现类JRDefaultScriptlet.java,默认的空实现了上面几个方法,它只是很便利的为我们提供了所需的八个方法的空实现。我们写自己的scriptlet时需要继承JRDefaultScriptlet.java这个类实现自己的相应的功能即可。

好了,我们现在就来为模板添加scriptlet

1)  在模板中,选中整个模板,如图:

双击右边的属性窗口,将其中的内容设置为如图所示的内容:

将“scriptlet class”设为您即将要制作的java类,这里我的java类名叫scriplet.ScriptletDemo。

其内部代码如下:

package scriplet;

import net.sf.jasperreports.engine.JRDefaultScriptlet;

import net.sf.jasperreports.engine.JRScriptletException;

import net.sf.jasperreports.renderers.JFreeChartRenderer;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PiePlot;

import org.jfree.chart.plot.PiePlot3D;

import org.jfree.data.general.DefaultPieDataset;

public class ScriptletDemo extends JRDefaultScriptlet  {

public void afterColumnInit() throws JRScriptletException {

System.out.println("**************************************afterColumnInit()**************************************");

}

@Override

public void afterDetailEval() throws JRScriptletException {

System.out.println("**************************************afterDetailEval()**************************************");

}

@Override

public void afterGroupInit(String groujpame) throws JRScriptletException {

System.out.println("**************************************afterDetailEval()**************************************");

}

@Override

public void afterPageInit() throws JRScriptletException {

System.out.println("**************************************afterPageInit()**************************************");

}

@Override

public void afterReportInit() throws JRScriptletException {

System.out.println("**************************************afterReportInit() begin**************************************");

//create pie chart dataset

DefaultPieDataset dateset = new DefaultPieDataset();

//set dataset value

dateset.setValue("Chinese", 108);

dateset.setValue("Math", 110);

dateset.setValue("English", 74);

dateset.setValue("Science Department", 226);

/**//*

* create jfreeChart object

* the first parameter is pie chart title

* the secend parameter is dataset of pie chart

* the three parameter is boolean value,create chart note

* the four parameter is boolean value,it's a tooltip of move mouse on

* configure chart to generate URLs,It's get a PiePlot3D object

*

*/

JFreeChart freeChart = ChartFactory.createPieChart3D("Report Pie Chart", dateset, true, false, false);

PiePlot pieplot = (PiePlot) freeChart.getPlot();

pieplot.setNoDataMessage("No data to display");

// set variable "jfreeChart" value

this.setVariableValue("jfreechart", new JFreeChartRenderer(freeChart));

System.out.println("**************************************afterReportInit() end**************************************");

}

@Override

public void beforeColumnInit() throws JRScriptletException {

System.out.println("**************************************beforeColumnInit()**************************************");

}

@Override

public void beforeDetailEval() throws JRScriptletException {

System.out.println("**************************************beforeDetailEval()**************************************");

}

@Override

public void beforeGroupInit(String groujpame) throws JRScriptletException {

System.out.println("**************************************beforeGroupInit()**************************************");

}

@Override

public void beforePageInit() throws JRScriptletException {

System.out.println("**************************************beforePageInit()**************************************");

}

@Override

public void beforeReportInit() throws JRScriptletException {

System.out.println("**************************************beforeReportInit()**************************************");

}

public String showInfor() throws JRScriptletException {

return "the is scriptlet scriptlet scriptlet the,sscriptlet report the is ascriptlet report this is a scriptlet report this is a scriptlet report";

}

}

2) 新建变量variable

如图在选中“Variable”,右击,点击“添加variable”

将新建的variable属性设置如下图所示:

其中variable class设为“net.sf.jasperreports.engine.JRRenderable”,同志您可能要迷惑了,该选项的下拉菜单中没有该选项啊,是的,的确没有,但是你可以粘贴进去。

3) 添加图像,直接将组件中的“image”对象拖拽进来,拖拽的时候,会有图片选择框,这个没有关系,你可以选择一个您喜欢的图片,也可以直接取消,只不过是一个标志,在模板中出现如下画面:

是不是很丑呢,嘿嘿,我也觉得丑。

好了,下面来设置图片的属性,这个才是关键的。属性如下图:

重要的是image expression以及expression class,分别设为“$V{jfreechart}”、“net.sf.jasperreports.engine.JRRenderable”

至此模板设置成功。

4)  代码测试

将上面设计好的模板保存为“E:/ireport/jfreechat.jrxml”

写一段java代码测试一下:

package test;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.util.HashMap;

import net.sf.jasperreports.engine.JREmptyDataSource;

import net.sf.jasperreports.engine.JasperCompileManager;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.engine.base.JRBaseVariable;

import net.sf.jasperreports.view.JasperViewer;

public class JChartReportMain {

/**

* Method name: main <BR>

* Description: main <BR>

* Remark: <BR>

* @param args  void<BR>

*/

public static void main(String[] args) {

String path = "

File file = new File(path);

InputStream in;

try {

HashMap<String, String> parameters = new HashMap<String, String>();

parameters.put("ReportTitle", "LAOSHULIN");

in = new FileInputStream(file);

JasperReport jasperReport = JasperCompileManager.compileReport(in);

for(int i = 0; i<jasperReport.getVariables().length;i++ ){

JRBaseVariable jb = (JRBaseVariable)jasperReport.getVariables()[i];

System.out.println(jb.getValueClassName() + jb.getName());

}

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,

parameters, new JREmptyDataSource());

JasperViewer viewer = new JasperViewer(jasperPrint);

viewer.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

}

运行结果如图:

你看多棒啊,是不是觉得自己很牛叉啊!

java代码设计模板,数据源为对象数组。

用java实现模板设计,我们就直接粘贴代码,先要将jasperreport相关的jar包导入进来:

我的代码结构如图所示:

WebappDataSource.java

/*

* JasperReports - Free Java Reporting Library.

* Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved.

* http://www.jaspersoft.com

*

* Unless you have purchased a commercial license agreement from Jaspersoft,

* the following license terms apply:

*

* This program is part of JasperReports.

*

* JasperReports is free software: you can redistribute it and/or modify

* it under the terms of the GNU Lesser General Public License as published by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* JasperReports is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU Lesser General Public License for more details.

*

* You should have received a copy of the GNU Lesser General Public License

* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.

*/

package datasource;

import net.sf.jasperreports.engine.JRDataSource;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JRField;

/**

* @author Teodor Danciu (teodord@users.sourceforge.net)

* @version $Id: WebappDataSource.java 3031 2009-08-27 11:14:57Z teodord $

*/

public class WebappDataSource implements JRDataSource

{

/**

*

*/

private Object[][] data =

{

{"Berne", new Integer(22), "Bill", "250 - 20th Ave."},

{"Berne", new Integer(9), "James Schneider", "277 Seventh Av."},

{"Boston", new Integer(32), "Michael Ott", "339 College Av."},

{"Boston", new Integer(23), "Julia Heiniger", "358 College Av."},

{"Chicago", new Integer(39), "Mary Karsen", "202 College Av."},

{"Chicago", new Integer(35), "George Karsen", "412 College Av."},

{"Chicago", new Integer(11), "Julia White", "412 Upland Pl."},

{"Dallas", new Integer(47), "Janet Fuller", "445 Upland Pl."},

{"Dallas", new Integer(43), "Susanne Smith", "2 Upland Pl."},

{"Dallas", new Integer(40), "Susanne Miller", "440 - 20th Ave."},

{"Dallas", new Integer(36), "John Steel", "276 Upland Pl."},

{"Dallas", new Integer(37), "Michael Clancy", "19 Seventh Av."},

{"Dallas", new Integer(19), "Susanne Heiniger", "86 - 20th Ave."},

{"Dallas", new Integer(10), "Anne Fuller", "135 Upland Pl."},

{"Dallas", new Integer(4), "Sylvia Ringer", "365 College Av."},

{"Dallas", new Integer(0), "Laura Steel", "429 Seventh Av."},

{"Lyon", new Integer(38), "Andrew Heiniger", "347 College Av."},

{"Lyon", new Integer(28), "Susanne White", "74 - 20th Ave."},

{"Lyon", new Integer(17), "Laura Ott", "443 Seventh Av."},

{"Lyon", new Integer(2), "Anne Miller", "20 Upland Pl."},

{"New York", new Integer(46), "Andrew May", "172 Seventh Av."},

{"New York", new Integer(44), "Sylvia Ott", "361 College Av."},

{"New York", new Integer(41), "Bill King", "546 College Av."},

{"Oslo", new Integer(45), "Janet May", "396 Seventh Av."},

{"Oslo", new Integer(42), "Robert Ott", "503 Seventh Av."},

{"Paris", new Integer(25), "Sylvia Steel", "269 College Av."},

{"Paris", new Integer(18), "Sylvia Fuller", "158 - 20th Ave."},

{"Paris", new Integer(5), "Laura Miller", "294 Seventh Av."},

{"San Francisco", new Integer(48), "Robert White", "549 Seventh Av."},

{"San Francisco", new Integer(7), "James Peterson", "231 Upland Pl."}

};

private int index = -1;

/**

*

*/

public WebappDataSource()

{

}

/**

*

*/

public boolean next() throws JRException

{

index++;

return (index < data.length);

}

/**

*

*/

public Object getFieldValue(JRField field) throws JRException

{

Object value = null;

String fieldName = field.getName();

if ("city".equals(fieldName))

{

value = data[index][0];

}

else if ("ID".equals(fieldName))

{

value = data[index][1];

}

else if ("name".equals(fieldName))

{

value = data[index][2];

}

else if ("address".equals(fieldName))

{

value = data[index][3];

}

return value;

}

}

next()  实现了 JRDataSource 中的方法.判断是否还有下一个.

getFieldValue(JRField field) 实现了JRDataSource 中的方法. field 是对应报表中的要填充的字段的名称.

模板设计代码,java实现模板时,要贯彻一个思想就设计思路要与XML模板中组成结构一致,这也是我的心得体会之一。

StaticText.java

package test;

import java.io.File;

import java.util.HashMap;

import net.sf.jasperreports.engine.JRAlignment;

import net.sf.jasperreports.engine.JRElement;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JasperCompileManager;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.engine.design.JRDesignBand;

import net.sf.jasperreports.engine.design.JRDesignExpression;

import net.sf.jasperreports.engine.design.JRDesignField;

import net.sf.jasperreports.engine.design.JRDesignParameter;

import net.sf.jasperreports.engine.design.JRDesignReportFont;

import net.sf.jasperreports.engine.design.JRDesignStyle;

import net.sf.jasperreports.engine.design.JRDesignTextField;

import net.sf.jasperreports.engine.design.JasperDesign;

import net.sf.jasperreports.engine.util.JRLoader;

import net.sf.jasperreports.view.JasperDesignViewer;

import net.sf.jasperreports.view.JasperViewer;

import datasource.WebappDataSource;

public class StaticText {

JRDesignReportFont font1 = new JRDesignReportFont();

// TODO Auto-generated method stub

/**

* Method name: main <BR>

* Description: main <BR>

* Remark: <BR>

* @param args  void<BR>

*/

public static void main(String[] args) {

JRDesignReportFont font1 = new JRDesignReportFont();

font1.setFontSize(12);

try {

// JRDesignStaticText text1=ReportUtil.getStaticText(

// 110,0,400,22,null,JRTextElement.TEXT_ALIGN_CENTER,font1,"city");

// JRDesignStaticText text2=ReportUtil.getStaticText(

// 110,0,400,22,null,JRTextElement.TEXT_ALIGN_CENTER,font1,"name");

// JRDesignStaticText text3=ReportUtil.getStaticText(

// 110,0,400,22,null,JRTextElement.TEXT_ALIGN_CENTER,font1,"address");

JasperDesign jasperDesign = new JasperDesign();

jasperDesign.setName("NoXmlDesignReport");

jasperDesign.setPageWidth(595);

jasperDesign.setPageHeight(842);

jasperDesign.setColumnWidth(515);

jasperDesign.setColumnSpacing(0);

jasperDesign.setLeftMargin(40);

jasperDesign.setRightMargin(40);

jasperDesign.setTopMargin(50);

jasperDesign.setBottomMargin(50);

JRDesignStyle normalStyle = new JRDesignStyle();

normalStyle.setName("Arial_Normal");

normalStyle.setDefault(true);

normalStyle.setFontName("Arial");

normalStyle.setFontSize(12);

normalStyle.setPdfFontName("Helvetica");

normalStyle.setPdfEncoding("Cp1252");

normalStyle.setPdfEmbedded(false);

jasperDesign.addStyle(normalStyle);

// JRDesignStyle boldStyle = new JRDesignStyle();

// boldStyle.setName("Arial_Bold");

// boldStyle.setFontName("Arial");

// boldStyle.setFontSize(12);

// boldStyle.setBold(true);

// boldStyle.setPdfFontName("Helvetica-Bold");

// boldStyle.setPdfEncoding("Cp1252");

// boldStyle.setPdfEmbedded(false);

// jasperDesign.addStyle(boldStyle);

//

// JRDesignStyle italicStyle = new JRDesignStyle();

// italicStyle.setName("Arial_Italic");

// italicStyle.setFontName("Arial");

// italicStyle.setFontSize(12);

// italicStyle.setItalic(true);

// italicStyle.setPdfFontName("Helvetica-Oblique");

// italicStyle.setPdfEncoding("Cp1252");

// italicStyle.setPdfEmbedded(false);

// jasperDesign.addStyle(italicStyle);

JRDesignParameter parameter = new JRDesignParameter();

parameter.setName("ReportTitle");

parameter.setValueClass(java.lang.String.class);

jasperDesign.addParameter(parameter);

// Fields

JRDesignField field = new JRDesignField();

field.setName("city");

field.setValueClass(java.lang.String.class);

jasperDesign.addField(field);

field = new JRDesignField();

field.setName("ID");

field.setValueClass(java.lang.Integer.class);

jasperDesign.addField(field);

field = new JRDesignField();

field.setName("name");

field.setValueClass(java.lang.String.class);

jasperDesign.addField(field);

field = new JRDesignField();

field.setName("address");

field.setValueClass(java.lang.String.class);

jasperDesign.addField(field);

JRDesignBand band = null;

JRDesignTextField textField = null;

JRDesignExpression expression = null;

band = new JRDesignBand();

band.setHeight(20);

textField = new JRDesignTextField();

textField.setX(5);

textField.setY(4);

textField.setWidth(100);

textField.setHeight(15);

textField.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_RIGHT);

textField.setStyle(normalStyle);

expression = new JRDesignExpression();

expression.setValueClass(java.lang.String.class);

expression.setText("$F{city}");

textField.setExpression(expression);

band.addElement(textField);

textField = new JRDesignTextField();

textField.setStretchWithOverflow(true);

textField.setX(120);

textField.setY(4);

textField.setWidth(100);

textField.setHeight(15);

textField.setPositionType(JRElement.POSITION_TYPE_FLOAT);

textField.setStyle(normalStyle);

expression = new JRDesignExpression();

expression.setValueClass(java.lang.Integer.class);

expression.setText("$F{ID}");

textField.setExpression(expression);

band.addElement(textField);

textField = new JRDesignTextField();

textField.setStretchWithOverflow(true);

textField.setX(220);

textField.setY(4);

textField.setWidth(100);

textField.setHeight(15);

textField.setPositionType(JRElement.POSITION_TYPE_FLOAT);

textField.setStyle(normalStyle);

expression = new JRDesignExpression();

expression.setValueClass(java.lang.String.class);

expression.setText("$F{name}");

textField.setExpression(expression);

band.addElement(textField);

textField = new JRDesignTextField();

textField.setStretchWithOverflow(true);

textField.setX(400);

textField.setY(4);

textField.setWidth(100);

textField.setHeight(15);

textField.setPositionType(JRElement.POSITION_TYPE_FLOAT);

textField.setStyle(normalStyle);

expression = new JRDesignExpression();

expression.setValueClass(java.lang.String.class);

expression.setText("$F{address}");

textField.setExpression(expression);

band.addElement(textField);

jasperDesign.setDetail(band);

HashMap<String, String> titleParameters = new HashMap<String, String>();

titleParameters.put("ReportTitle", "helloworld");

File reportFile= new File("E:/billin.jasper");

JasperCompileManager.compileReportToFile(jasperDesign,reportFile.getPath());

JasperReport jasperReport=(JasperReport)JRLoader.loadObject(reportFile.getPath());

JasperPrint jasperPrint=JasperFillManager.fillReport( jasperReport,titleParameters,new WebappDataSource());

System.out.println("--------"+jasperPrint.getName());

JasperViewer viewer = new JasperViewer(jasperPrint);

viewer.setTitle("");

viewer.setVisible(true);

//             JasperDesignViewer viewer = new JasperDesignViewer(jasperReport);

//             viewer.setVisible(true);

} catch (JRException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

下面就可以运行,查看报表结果:

关于jasperreport的sample

1)运行sample之前需要安装ant服务器

2)进入到某个sample目录中,输入ant,之后再输入ant view

3)有些sample需要运行sample自带的数据,则在hsqldb目录中,输入ant runServer命令启动数据库,再到sample目录中,输入ant,之后再输入ant view。

(0)

相关推荐

  • 我的世界自定义NPCMOD玩法介绍:1基础介绍

    大家好,这是我的世界自定义NPCMOD玩法介绍第一期--基础介绍. 操作方法 01 先拿出一个叫NPC魔杖的东西,这是一切的基础. 方法/步骤2 01 使用NPC魔杖点地,即可创造出一个NPC.第一次 ...

  • 笔记本内存介绍 笔记本双通道内存介绍

    笔记本双通道内存介绍 双通道内存技术其实是一种内存控制和管理技术,它依赖于芯片组的内存控制器发生作用,在理论上能够使两条同等规格内存所提供的带宽增长一倍。它并不是什么新技术,早就被应用于服务器和工作站 ...

  • 3dmax 7工作界面介绍:[1]菜单栏介绍

    操作方法 01 3Dmax是最主流的三维动画制作软件之一,电影.电视.游戏.虚拟建模和动漫产业中我们都能看到它的身影.那么,对于初学者而言,它的工作界面是什么样的呢?首先我们在 windows中启动3 ...

  • 三国群豪传各类建筑功能介绍 天坛/资源建筑介绍

    操作方法 01 很多朋友在问三国群豪传各类建筑有哪些功能,下面聚侠带来三国群豪传天坛/资源建筑介绍,希望可以帮助到大家. 三国群豪传最全建筑功能介绍: 1.天坛 第一层:一级魔防宝石*1,一级物防宝石 ...

  • 全军出击刺激战场玩法介绍和基础操作介绍

    全军出击刺激战场目前已成为国外正版的PUBG,作为正版授权手游,游戏还原度非常高,前赴后继大批玩家在涌入,这里就给大家介绍下游戏的玩法和基础操作. 操作方法 01 游戏每场演习是100人,如果玩家不够 ...

  • ConquerCam.exe进程的详细介绍 ConquerCam进程信息介绍

    进程文件: ConquerCam or ConquerCam.exe 进程名称: ConquerCam 进程类别:存在安全风险的进程 英文描述: ConquerCam.exe is a part of ...

  • 侠岚OL人物介绍 三大人物职业介绍

    操作方法 01 侠岚OL中,游戏里有三大职业,他们分别是城卫.飞刃.万象三种.下面就跟随小编来一起看看侠岚OL中三大职业的各自特点吧! 侠岚OL中三种职业都具有五行属性:金.木.水.火.土,作为五行操 ...

  • 轩辕OL世界BOSS介绍 BOSS战规则介绍

    操作方法 01 很多朋友在问轩辕OL世界BOSS怎么打,以及BOSS战规则是什么,下面聚侠leaf就总结了一些内容和大家分享. 轩辕OL世界BOSS简介:玩家达到一定等级之后便可参加击杀世界BOSS的 ...

  • sqlserver2014内存数据库特性介绍

    相信大家对内存数据库的概念并不陌生,之前也有多位大牛介绍过SQL内存数据库的创建方法,我曾仔细 拜读过,有了大致了解,不过仍有很多细节不清晰,比如: (1)内存数据库是把整个数据库放到内存中的吗? ( ...