返回首页

目录表简介图书馆和角色环境配置如果您需要解决!简单的应用应用程序体系结构(MVC)"神奇的东西??映射! POJO和DAO"模式??创建数据透视WTKX"查看?神奇的东西"的控制器连接??摘要历史0。简介{S0}
在开始本文之前,我想澄清,这是不是"我的RPG游戏??,但"我们的RPG游戏吗??在现实中,这是"我们的MVC游戏??玩一个新的{A}(RIA),从Apache称为支点。
透视!什么? "Apache Pivot是一个为Java构建富Internet应用程序的开放源码平台。它结合了Java平台的健壮性现代RIA工具箱提高生产力和可用性功能。 使用Java和XML的组合,可作为一个applet运行,或作为一个独立的,可以选择离线,桌面应用程序.???/ p>
桌面应用程序!真的吗?是的,它为示范简单的应用程序使用模型 - 视图 - 控制器(MVC) - 视图 - 控制器架构,而无需使用任何其他的MVC框架和/或库。1。图书馆和角色
喜欢古典RPG游戏,(),我们有三个经典的"类?? "工作??或"种族??剑士,牧师和向导,为每个"作业,??我们有库(罐)或框架,在此应用程序中引用。
让我们继续讨论我们的英雄:枢轴次笑傲江湖的作用,因为他是在前端和卫冕从用户的攻击(鼠标点击,无效数据等),由他的盾"模式和弹出消息应用程序???=),很有趣吗?春天扮演一个牧师的角色,哦,不! Spring是一个向导,因为他使用了一个神奇的配置,为所有的应用程序库和/或框架之间的链接。Hibernate会扮演一个牧师的角色,因为他医治和祝福与从数据库中检索数据,为用户面前失去的数据透视。
现在,你知道我们的英雄了一下,但我们需要交谈,然后开始称为Maven和SpringIDE!2。环境配置
Maven和SpringIDE的NPC对话,我们需要配置我们的环境。首先,如果你不具备MySQL服务器,从尝试下载并安装它,这很容易。
配置完成后,我们下载} {A7仙境数据库脚本:mob_db.sqlitem_db.sql
现在,键入:

mysql -uroot

如果你没有设置任何"根用户密码,或??{C}
如果你设置了一个密码到MySQL的"根??用户。
最后,我们使用这个脚本的数据导入到数据库中:
CREATE DATABASE Ragnarok;

USE Ragnarok;

\. [your-path]/mob_db.sql

\. [your-path]/item_db.sql

{S2}
安装,配置MySQL和导入仙境数据后,我们安装以下Maven (不要错过这个让你不必回来以后部分)。
现在,这是时间在Eclipse中的Maven配置。 Eclipse的!为什么呢?这是一个伟大的的IDE中我们可以发现,因为许多插件可以促进发展中国家(我不是一个Eclipse的乐趣男孩,我使用它,因为我是一个骗子位=)),好吗如果你不" T有Eclipse的高考,从尝试下载。
后,我们尝试安装这个插件在Eclipse IDE:选择帮助GT;安装新软件。这应该显示"; Installquot;对话框。粘贴到名为quot该领域的更新网站的URL();工作:quot;,然后按Enter键。按下Enter,应引起Eclipse的更新可用的插件和组件的列表。选择列出的组件:下m2eclipse的"Maven的集成为Eclipse(必填)quot;。单击"下一步"。然后Eclipse会检查,看看是否有任何问题,这将阻止成功安装。单击"下一步",并同意Eclipse公共许可证V1.0的条款。单击"完成"开始安装过程。然后Eclipse会下载并安装必要的组件。安装过程完成后,Eclipse会询问您是否要重新启动IDE。 Sonatype强烈建议您重新启动后安装m2eclipse的你的IDE。
{S3}
(类似的步骤),我们还安装SpringIDE。{S4}的
很好,现在我们创建我们的项目,只是为了显示在这篇文章中,为什么我们使用Maven插件??,我们停在这里??我们在Eclipse中创建一个新的Maven项目,我们把它称为"仙境传说??弹簧休眠你可以在这里看到:
接下来,我们检查"创建一个简单的项目(跳过原型选择)??{中六}
接下来,在组ID,:"ro.springhibernate??工件:"仙境传说 - 弹簧 - 休眠??{七}
如果创建的项目是成功的,我们将它转​​换成一个弹簧项目,不要担心,很容易!非常简单!也许你还记得SpringIDE,它的时候使用它。只需右键单击该项目,我们发现在上下文菜单的底部"春天的工具??,我们单击"添加Spring项目的性质???{S8}
Ouf,最后,我们没有任何努力或他们的基本知识粘贴在pom.xml文件和Maven下载所有需要的库代码。 (只需复制粘贴之前,LT; / projectgt; POM文件)
<dependencies>

  <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

        <version>5.1.6</version>

  </dependency>

  <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-context</artifactId>

        <version>2.5.6</version>

  </dependency>

  <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-jdbc</artifactId>

        <version>2.5.6</version>

  </dependency>

  <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-orm</artifactId>

        <version>2.5.6</version>

  </dependency>

  <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-aop</artifactId>

        <version>2.5.6</version>

  </dependency>

  <dependency>

        <groupId>org.hibernate</groupId>

        <artifactId>hibernate</artifactId>

        <version>3.2.6.ga</version>

  </dependency>

  <dependency>

        <groupId>org.hibernate</groupId>

        <artifactId>hibernate-annotations</artifactId>

        <version>3.4.0.GA</version>

  </dependency>

  <dependency>

        <groupId>org.hibernate</groupId>

        <artifactId>hibernate-commons-annotations</artifactId>

        <version>3.3.0.GA</version>

  </dependency>

  <dependency>

        <groupId>org.apache.pivot</groupId>

        <artifactId>pivot-core</artifactId>

        <version>1.4</version>

  </dependency>

  <dependency>

        <groupId>org.apache.pivot</groupId>

        <artifactId>pivot-wtk</artifactId>

        <version>1.4</version>

  </dependency>

  <dependency>

        <groupId>org.apache.pivot</groupId>

        <artifactId>pivot-wtk-terra</artifactId>

        <version>1.4</version>

  </dependency>

  <dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>slf4j-simple</artifactId>

        <version>1.4.2</version>

  </dependency>

</dependencies>

"第一个任务完成!???/ p>2.0 - 如果您需要解决!
在许多书籍或教程的这一部分已被忽略,和读者太气馁,只是因为他不希望被称为quot; n00bquot;,"n00bquot;第一次是不是世界=)。好吧,我们都回来了。
如果你是一个很温柔的错误,重新启动Eclipse后,感到震惊"的Maven集成需要...???{S9}
这是很容易解决,只需创建em>的BAT文件,如果你使用Windows - ????和你懒 - 你不想重复此步骤,每次打开您的Eclipse ,尝试写这段代码在BAT文件,并启动它:
eclipse.exe -vm path to your JDK or JRE/bin?/pre>



Example:

eclipse -vm "C:\Program Files\Java\jdk1.6.0_13\bin"

如果您有任何问题,解决与Maven的依赖(下载库)或库未找到!在这一刻,你需要自己来做,尝试搜索错过"罐子} {A12或任何Maven资源库,下载3个文件??你错过jar.JAR你错过jar.JAR.MD5你错过jar.JAR.SHA1
,并手动安装它们。最后尝试重新启动Eclipse或保存pom.xml文件自动检查:
mvn install:install-file  -Dfile=your-missed-jar.JAR -DgroupId=org.some.group 

-DartifactId=your-artifact -Dversion=jar-version -Dpackaging=jar

只是等待!我在哪里可以找到DgroupId(GROUPID),DartifactId(ArtifactId),Dversion(版)?
很好的问题,只是看在Eclipse控制台中,你会发现所有必要的信息!{S10}3。简单的应用
我们的简单的应用程序代码代号> RoManager管理,你可以看到小怪(怪物)和项目,用例图???{S11}
好了!我们必须了解应用程序的目标!但如何系统工作?
RoManager基本上用于创建用户界面UI(点击约束力WTKX文件的Java类),春季的配置,并创建控制器(控制器是一个监听器,我们稍后详细解释)豆支点。
等待等待等待,什么"roempire.com的作用??
哦!真的是你想知道吗? Euh,这是一个微小的白砍小怪和项目图像从RoEmpire网上数据库检索。我们并不需要下载仙境的客户端(3Gbytes),它只是提取得到精神!这些东西是在文章的奖金,你可以使用它在许多领域!老年退休金计划Web服务,RSS等。4。应用程序体系结构(MVC)
在这篇文章中,我们为ASP.NET MVC的一个类似的架构。见探险家的形象,并没有类似的功能,我是一个坏人吗?
我不知道,但是,我只想来组织应用程序代码,并发现了一个简单的架构,它不是一个标准组织?让我们比较我们的MVC架构和微软! - 默认的项目 - 我们的MVC架构微软ASP.NET MVC体系结构{S13}
我们的架构是比微软更好!这是因为它,而不是桌面MVC和Web MVC。
我们有一个文件夹源??em>的模型??仅此文件夹包含所有映射类POJO和DAO,其他的东西在这里不允许。
?EM>控制器??源文件夹中包含控制器(监听器类),由包分组的名称,每个包的名称是??代码>查看??类,其控制器进行分组Java的UI类(查看):视图名称(RoManager)控制器的源文件夹,一个包叫什么名字??代码> romanager??查看RoManager包含所有控制器。
?em>的意见??源文件夹包含所有的Java UI类!不包括WTKX文件。
但是WTKX文件在哪里?
WTKX文件不是源代码 - 它们不能编译 - ????源文件夹,这个我从他们em>的意见的原因em>的资源文件夹???? 。我个人喜欢分离的源文件,它们可以被编译为Java从文本文件,如WTKX。
最后一个??EM> JAVA??源文件夹包含所有新开发的东西??代码>链接??类或他人。
"已被发现的关键!???/ p>5。 "神奇的东西??/ H2>
"Niflheim .???/ p>
不用担心,如果你不理解,感到困惑,或者你解决在文章的这一部分,如果你不{A13}(IOC)在Java反射和它的技术感兴趣。您可以跳过很容易,而不是看到什么是类链接的内容,只是用它。
但是,如果你有兴趣,你可以看到看完这篇文章后,再高的水平,我们可以做一个简单的{A14}。
"神奇的东西吗??一个连接器类有两个目标:分离监听器类(我们称之为控制器)从透视的Java UI类(类绑定组件,呼吁在这篇文章的意见)。容易改变控制器,而无需重新编译源代码。
?类似Spring的链接器的工作??/ P>
从配置文件中读取并添加到特定组件,控制器,你困惑吗?没问题,打开你的大眼睛。
首先,看到Java源代码{A15},不玩其他的例子!
25                // Add a button press listener

26                pushButton.getButtonPressListeners().add(new ButtonPressListener() {

27                    @Override

28                    public void buttonPressed(Button button) {

29                        Alert.alert(MessageType.INFO, "You clicked me!", window);

30                    }

31                });

[1]监听器控制器和[2] LISTENER = ButtonPressListener。
[1] [2],我们可以看到控制器是包含在Java UI类,这是违背我们的架构理论。出于这个原因,连接器已创建连接通过使用配置文件的代码分隔??>的监听器吗??绑定组件。
实现点击一个独立的控制器。
{S14}
第一种方法称为"绑定'很简单,在透视教程。我们只是简化了这里!
/**

 * Binding WTKX file in Java UI class by using WTKXSerializer

 *

 * @param obj Java class UI

 * @param ui path to WTKX file

 * @throws IOException

 * @throws SerializationException

 */

public static void bind(Object obj, String ui) throws IOException, 

		SerializationException

{

    WTKXSerializer serializer = new WTKXSerializer();

    serializer.readObject( new Linker().resource( ui ) );

    serializer.bind(obj);

}

第二种方法叫什么名字??代码>链接??是连接控制器??代码>组件??请注意,我们可以连接多个控制器到一个组成部分。
       /**

       * Linking controllers to Java UI class components

       *

       * @param obj Java UI Class

       * @throws ParserConfigurationException

       * @throws SAXException

       * @throws IOException

       * @throws XPathExpressionException

       * @throws ClassNotFoundException

       * @throws SecurityException

       * @throws NoSuchMethodException

       * @throws IllegalArgumentException

       * @throws InstantiationException

       * @throws IllegalAccessException

       * @throws InvocationTargetException

       * @throws NoSuchFieldException

       */

      @SuppressWarnings({ "unchecked" })

      public static void link(Object obj) throws ParserConfigurationException, 

		SAXException, IOException, XPathExpressionException, 

		ClassNotFoundException, SecurityException, NoSuchMethodException, 

		IllegalArgumentException, InstantiationException, 

		IllegalAccessException, InvocationTargetException, NoSuchFieldException

      {

            // reading a XML file (configuration file)

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder = factory.newDocumentBuilder();

            Document document = builder.parse( new Linker().resource("controllers.xml") );



            // creating and parsing configuration file by using XPath

            XPathFactory xfactory = XPathFactory.newInstance();

            XPath xpath = xfactory.newXPath();

            XPathExpression xexpression = xpath.compile("//Configuration/View

		[@name='" + obj.getClass().getSimpleName() + "']/Controller");

            NodeList result = (NodeList) xexpression.evaluate(document, 

				XPathConstants.NODESET);

            for( int x = 0 ; x < result.getLength() ; x++ )

            {

                  //  bind controller

                        //# create a class instance

                  String fieldName = 

		result.item( x ).getAttributes().getNamedItem("field").getNodeValue();

                  String className = 

		result.item( x ).getAttributes().getNamedItem("class").getNodeValue();

                  String eventName = 

		result.item( x ).getAttributes().getNamedItem("event").getNodeValue();

                  String eventPckg = 

		result.item( x ).getAttributes().getNamedItem

				("eventPackage").getNodeValue();



                  eventPckg = eventPckg != null && !eventPckg.isEmpty() ? 

					eventPckg : "org.apache.pivot.wtk";



                  Object classInstance = null;

                  {

                        Class clazz = Class.forName("controller." + 

			obj.getClass().getSimpleName().toLowerCase() + 

			"." + className + "Controller");

                        Constructor ctr = clazz.getConstructor

				( new Class[]{Object.class} );

                        classInstance = ctr.newInstance(new Object[]{ obj });

                  }



                        //#

                        //# getting listeners

                        //#



                  // get field example PushButton

                  Object fieldObject = null ;

                  {

                        Field field = obj.getClass().getDeclaredField( fieldName );

                        field.setAccessible( true );

                        fieldObject = field.get(obj);

                  }



                  // get Listeners List from button

                  Object lisenter = null;

                  {

                        // as "getButtonPressListeners"

                        Method method = fieldObject.getClass().getMethod

				( "get" + eventName + "Listeners" , new Class[]{});

                        lisenter = method.invoke( fieldObject , new Object[]{});

                  }



                  // add new listener to button

                  {

                        Method method = lisenter.getClass().getMethod

				("add", new Class[]{Object.class} );

                        method.invoke( lisenter , new Object[]{classInstance} );

                  }

            }

      }

??为什么我们不使用Spring?如果我们正在使用它,我们可以做类似的工作! ??/ P>
要继续吗?? ?链接。神奇的东西"控制器"quot;6。映射! POJO和DAO"模式??/ H2>
我们这里不讨论有关如何配置Spring和Hibernate。您可以下载源代码和查看applicationContext.xml中,hibernate.cfg.xml和jdbc.properties文件。在我们的例子中,
{A16}是容易的,我们不会有一个复杂的数据库架构,没有多到多,没有一到多的关系,只是个别的表??代码> mob_db?? ??代码> item_db??
问:但我们只是用于演示使用所有这些列
答:没有!我们只是有趣的列使用,如??代码>身份证?? ??代码>名称??
问:我们讨论的代码>小怪和代码>项目???????也许他们有类似的功能
一个:是的!正如你可以看到用例?暴民?代码>????代码>项目?有类似的功能,我们只讨论的吗??代码>小怪??作示范。
问:什么类型的映射,我们使用
?答:注解是很容易的。
Q:很难理解的文章,从本节
:老年退休金计划!秘密。?
我们创建一个类名为代码>手机只包含感兴趣的列?编号(例如:1109)雪碧(例如:DEVIRUCHI)kName(例如:Deviruchi)LV(例如:46)惠普(例如:6666)SP(例如:0)种族(例如:恶魔)
(Deviruchi是我的首选宠物(GT?_lt ;)???可爱す)
我们创建了一个DAO接口,包含2种方法:列表编辑
public interface MobDAO

{

      /**

       * Get all mobs (monsters) list

       * @return

       */

      public List<Mob> getList();



      /**

       * Edit mob information

       * @param mob new values

       * @return

       */

      public boolean edit( Mob mob );

}

你可以看到这在源代码中的接口的执行。7。创建枢轴WTKX"查看??/ H2>
如果你在这里!并没有气馁,但你真的被困在好奇心的驱使(^_^),和我对你有两个消息,你想先 - "??或"不好??!
好吧,我选择了"不好??新闻!目前??我们不能在透视作弊,我们不能使用任何BOT或进出口人工智能??我的意思是目前我们没有任何语法着色,智能感知,向导,拖动和拖放等你做的一切,用你喜欢的文本编辑器。看{A17}。
"??新闻!枢轴的用户界面是非常容易和清晰。你可以成为一个大师,或你可以找到别人"的思想,革命的他们,因为你知道"你想要什么??不像人使用DND(拖放)和向导。你想试试吗?不要害怕!枢轴团队计划GUI Builder中,见{A18}。
,但我们是骗子,我们添加WTKX文件??EM>。XML??因为我们有一个在Eclipse中的语法着色!
正如我已经提到,WTKX文件位于资源文件夹中,我们有两个文件:romanager / ui.wtkx.xml RoManager查看romanager /暴徒/ EditMob查看ui.wtkx.xml
你发现在源代码中RoManager WTKX文件,但我会告诉你EditMob WTKX文件:
<Dialog wtkx:id="dialogEditMob" title="Edit Mob!"

      xmlns:wtkx="http://pivot.apache.org/wtkx"

      xmlns="org.apache.pivot.wtk">

      <content>

            <BoxPane>

            <Form wtkx:id="formEditMobs">

                  <sections>

                        <Form.Section>

                             <Label wtkx:id="labelID" Form.label="ID" textKey="id"/>

                             <Label wtkx:id="labelSprite" Form.label="Sprite" 

					textKey="sprite"/>

                             <TextInput wtkx:id="textName" Form.label="Name" 

					textKey="name"/>

                             <TextInput wtkx:id="textLevel" Form.label="Level" 

					textKey="level"/>

                             <TextInput wtkx:id="textHP" Form.label="HP" textKey="hp"/>

                             <TextInput wtkx:id="textSP" Form.label="SP" textKey="sp"/>

                             <TextInput wtkx:id="textRace" Form.label="Race" 

					textKey="race"/>

                             <Separator/>

                             <Label wtkx:id="labelMessage"/>

                        </Form.Section>

                  </sections>

            </Form>

            <BoxPane>

                        <PushButton wtkx:id="btnSave" buttonData="Save"/>

                  <PushButton wtkx:id="btnClose" buttonData="Close"/>

            </BoxPane>

        </BoxPane>

      </content>

</Dialog>

,这是一个Java UI类:
public class EditMob

{

      @WTKX private Dialog dialogEditMob = null;

      @WTKX private Form formEditMobs = null;

      @WTKX private Label labelID = null;

      @WTKX private Label labelSprite = null;

      @WTKX private TextInput textName = null;

      @WTKX private TextInput textLevel = null;

      @WTKX private TextInput textHP = null;

      @WTKX private TextInput textSP = null;

      @WTKX private TextInput textRace = null;

      @WTKX private PushButton btnSave = null;

      @WTKX private PushButton btnClose = null;

      @WTKX private Label labelMessage = null;



      /**

       * Default constuctor

       * @throws Exception

       */

      public EditMob() throws Exception

      {

            Linker.bind(this, "romanager/mobs/ui.wtkx.xml");

            Linker.link( this );

      }



      public Dialog getDialogEditMob() {

            return dialogEditMob;

      }



      public Form getFormEditMobs() {

            return formEditMobs;

      }



      public Label getLabelID() {

            return labelID;

      }



      public Label getLabelSprite() {

            return labelSprite;

      }



      public TextInput getTextName() {

            return textName;

      }



      public TextInput getTextLevel() {

            return textLevel;

      }



      public TextInput getTextHP() {

            return textHP;

      }



      public TextInput getTextSP() {

            return textSP;

      }



      public TextInput getTextRace() {

            return textRace;

      }



      public PushButton getBtnSave() {

            return btnSave;

      }



      public PushButton getBtnClose() {

            return btnClose;

      }



      public Label getLabelMessage() {

            return labelMessage;

      }

} 

容易吗?8。神奇的东西"的控制器连接??/ H2>
继续??已自动配置控制器通过连接器类,从资源文件夹中的文件名为??EM> controllers.xml??我创建了一个DTD文件为IntelliSense:
的DTD文件EM> linker.dtd文件的源代码吗???
<!ELEMENT Configuration (View*)>

<!ELEMENT View (Controller*)>

<!ELEMENT Controller EMPTY >



<!ATTLIST View name CDATA #REQUIRED>

<!ATTLIST Controller field CDATA #REQUIRED>

<!ATTLIST Controller class CDATA #REQUIRED>

<!ATTLIST Controller event CDATA #REQUIRED>

<!ATTLIST Controller eventPackage CDATA "">

创建一个控制器!对于任何在Java UI类的组成部分,它是强制性的,以实现一个监听器接口,并添加一个参数的构造函数:对象,通过查看(Java UI类)的对象,你可以在这里看到,
public class CloseDialogController implements ButtonPressListener

{

      /**

       * View - Java UI Class

       */

      private EditMob view = null ;



      public CloseDialogController( Object view )

      {

            this.view = (EditMob) view;

      }



      public void buttonPressed(Button button) {

            this.view.getDialogEditMob().close();

      }

}

最后加入??EM> controllers.xml??控制器(称为在Spring bean)没有??强>控制器??名称,控制器CloseDialog自动链接(在Spring注入)它的组成部分:
<Controller event="ButtonPress" 

	class="adrabi.codeproject.controllers.editmob.CloseDialog" field="btnClose"/>

魔术?
在这里,一个完整的controllers.xml源:
<!DOCTYPE Configuration SYSTEM "linker.dtd" >

<Configuration>

      <View name="RoManager">

            <Controller event="ButtonPress" 

		class="adrabi.codeproject.controllers.romanager.RefreshMobs" 

		field="btnRefreshMob"/>

            <Controller event="ButtonPress" 

		class="adrabi.codeproject.controllers.romanager.EditMob" 

		field="btnEditMob"/>

            <Controller event="TableViewSort" 

		class="adrabi.codeproject.controllers.romanager.MobsSort" 

		field="tableMobs"/>

            <Controller event="TableViewSelection" 

		class="adrabi.codeproject.controllers.romanager.ShowDetails" 

		field="tableMobs"/>

            <Controller event="ImageView" 

		class="adrabi.codeproject.controllers.romanager.ImageMobLoad" 

		field="imageMob"/>

      </View>

      <View name="EditMob">

            <Controller event="ButtonPress" 

		class="adrabi.codeproject.controllers.editmob.CloseDialog" 

		field="btnClose"/>

            <Controller event="ButtonPress" 

		class="adrabi.codeproject.controllers.editmob.SaveMob" 

		field="btnSave"/>

      </View>

</Configuration>

"最后的任务完成.???/ p>9。摘要
大秘密,我是一个ASP.NET开发=)! JavaEE的,春天,休眠是新的我。我开始鼓励我,以了解高考有点的这篇文章中,使用hikikomori / nolife风格在JEE感兴趣的其他新手的滑稽!现在你知道,无论是Adobe和微软的创建RIA框架,Apache也已进入由枢轴在RIA的挑战。Pivot是在Apache中使用Java技术和XML的RIA。春天,邪恶的框架提供了很多其他框架如Hibernate的支持。Hibernate中,一个流行的持久化/ ORM的Java框架。
转到源和完成??代码>项目??管理,如??代码>小怪??
"游戏在!???/ p>
非常感谢您的阅读,您的意见,投票,建议和更正。 10。历史三月二十八日,2010:初始版本

回答

评论会员:游客 时间:2012/01/26
Shog字体颜色="green9
您已经成功地打开"可见空白"的功能选择- GT的编辑,先进的GT;查看白色空间"菜单(或按Ctrl移位8)。切换这一关
评论会员:。Josh_Jackson 时间:2012/01/26
尝试按Ctrl - R组合键CTRL - W随后在VS

来源:{A19}]