{"id":124714,"date":"2018-05-29T11:14:49","date_gmt":"2018-05-29T09:14:49","guid":{"rendered":"https:\/\/www.justinmind.com\/blog\/how-to-use-justinminds-api\/"},"modified":"2025-02-03T16:44:29","modified_gmt":"2025-02-03T15:44:29","slug":"how-to-use-justinminds-api","status":"publish","type":"post","link":"https:\/\/www.justinmind.com\/es\/soporte\/como-usar-justinminds-api","title":{"rendered":"C\u00f3mo crear plugins Justinmind"},"content":{"rendered":"<p>Inicia la aplicaci\u00f3n Eclipse dentro de tu carpeta JustinmindSDK. A continuaci\u00f3n, selecciona una carpeta para guardar tu espacio de trabajo y haz clic en \u00abUsar esta como predeterminada y no volver a preguntar\u00bb. <\/p>\n<h2><a id=\"plugin-setup\"><\/a>Primera configuraci\u00f3n<\/h2>\n<p>A continuaci\u00f3n, selecciona \u00abCrear un nuevo proyecto Java&#8230;\u00bb.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-14303\" src=\"https:\/\/www.justinmind.com\/wp-content\/uploads\/2021\/02\/welcome-justinmindsdk.png\" alt=\"welcome-justinmindsdk\"><\/p>\n<p>Elige un nombre para tu plugin y aseg\u00farate de que el entorno de ejecuci\u00f3n JRE seleccionado es &#8216;JavaSE-11&#8217;. A continuaci\u00f3n, haz clic en Siguiente.<br \/>\n<img decoding=\"async\" class=\"alignnone size-full wp-image-14303\" src=\"https:\/\/www.justinmind.com\/wp-content\/uploads\/2021\/02\/new-plugin-justinmindsdk.png\" alt=\"newplugin-justinmindsdk\"><\/p>\n<p>En Configuraci\u00f3n de Java haz clic en la pesta\u00f1a Bibliotecas. Selecciona \u00abModulePath\u00bb y a\u00f1ade todos los m\u00f3dulos JavaFX que encontrar\u00e1s en la carpeta &#8216;javafx&#8217; dentro de la carpeta &#8216;JustinmindPluginSDK&#8217; utilizando la opci\u00f3n A\u00f1adir JARS externos. Para Windows : JustinmindPluginSDK\/javafx\/lib Para MacOS: Applications\/JustinmindPluginSDK\/javafx\/lib <\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-14303\" src=\"https:\/\/www.justinmind.com\/wp-content\/uploads\/2021\/02\/setup-modules-justinmindskd.png\" alt=\"m\u00f3dulos-justinmindsdk\"><\/p>\n<p>Selecciona \u00abClasspath\u00bb y a\u00f1ade todos los jars contenidos en la carpeta &#8216;api_plugins&#8217; que encontrar\u00e1s en la carpeta JustinmindSDK. Para Windows : JustinmindPluginSDK\/api_plugins\/ Para MacOS: \/Aplicaciones\/JustinmindPluginSDK\/api_plugins\/<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-14303\" src=\"https:\/\/www.justinmind.com\/wp-content\/uploads\/2021\/02\/setup-classpath-justinmindsdk.png\" alt=\"classpath-justinmindsdk\"><\/p>\n<p>Pulsa Finalizar. Selecciona No crear module-info.java cuando te lo pida. Ahora hemos creado el proyecto Java principal que contendr\u00e1 el c\u00f3digo de nuestro plugin.<\/p>\n<h2><a id=\"write-your-plugin\"><\/a>Escribe tu plugin<\/h2>\n<p><strong>Estructura<\/strong><\/p>\n<p>La estructura de un plugin Justinmind es muy sencilla. S\u00f3lo necesitas un archivo de clase principal que contendr\u00e1 el c\u00f3digo de ejecuci\u00f3n de la acci\u00f3n de tu plugin. Esta clase debe implementar la interfaz &#8216;IPlugin&#8217; de la API de Justinmind. IPlugin define dos m\u00e9todos: getName() &#8211; este m\u00e9todo definir\u00e1 el nombre que se mostrar\u00e1 en la UI de Justinmind una vez instalado tu plugin. run() &#8211; lo que hace tu plugin. Crea el archivo de clase. Haz clic con el bot\u00f3n derecho del rat\u00f3n en la carpeta &#8216;src&#8217; de tu plugin y selecciona Nueva clase&gt;. Dale un nombre a tu clase principal y selecciona la interfaz IPlugin del paquete com.justinmind.prototyper.api.plugins. Haz clic en Finalizar.  <\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-14303\" src=\"https:\/\/www.justinmind.com\/wp-content\/uploads\/2021\/02\/create-plugin-class-justinmindsdk.png\" alt=\"crearplugin-justinmindsdk\"><\/p>\n<p>Ahora puedes escribir tu c\u00f3digo.<\/p>\n<h2><a id=\"example-plugin-one\"><\/a>Ejemplo: exportar todos los textos a un archivo CSV<\/h2>\n<pre>import java.awt.Desktop;\nimport java.io.BufferedWriter;\nimport java.io.File;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.io.Writer;\nimport java.util.List;\nimport com.justinmind.pcontrols.ControlUtils;\nimport com.justinmind.prototyper.api.API;\nimport com.justinmind.prototyper.api.IPrototype;\nimport com.justinmind.prototyper.api.plugins.IPlugin;\nimport com.justinmind.prototyper.api.ui.canvas.ICanvas;\nimport com.justinmind.prototyper.api.ui.component.ICanvasComponent;\nimport com.justinmind.prototyper.api.ui.component.IImage;\nimport com.justinmind.prototyper.api.ui.component.IInput;\nimport com.justinmind.prototyper.api.ui.component.IValuedComponent;\nimport javafx.stage.FileChooser;\n\npublic class TestPlugin implements IPlugin { \n\n  @Override\n  public void run() {\n    try {\n      IPrototype prototype = API.getPrototypeLoader().loadPrototype();\n      List canvas = prototype.getApiCanvases();\n      String content = \"Word in prototype\\n\\n\";\n      for (ICanvas current : canvas) {\n        content += \"Screen: \" + current.getApiName() + \"\\n\";\n        List components = current.getApiRoot().getApiChildren();\n        for (ICanvasComponent iComponent : components) {\n          content += addTextsToContent(iComponent);\n        }\n      }\n \n      FileChooser dialog = new FileChooser();\n      FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter(\"CSV files (*.csv)\", \"*.csv\");\n      dialog.getExtensionFilters().add(extFilter);\n      File file = dialog.showSaveDialog(ControlUtils.getMainWindow());\n      if (file != null) {\n        Writer output = null;\n        FileWriter fw = null;\n        try {\n          fw = new FileWriter(file);\n          output = new BufferedWriter(fw);\n          output.write(content);\n          output.close();\n          Desktop.getDesktop().open(file);\n        } catch (IOException e) {\n          Alert a = new Alert(AlertType.ERROR);\n          a.setContentText(e.getLocalizedMessage());\n          a.show();\n        }\n      } else {\n        \/\/ show error\n      }\n    } catch (Exception e) {\n      Alert a = new Alert(AlertType.ERROR);\n      a.setContentText(e.getLocalizedMessage());\n      a.show();\n    }\n  } \n\n  private String addTextsToContent(ICanvasComponent iComponent) {\n    String content = \"\";\n    if (iComponent instanceof IValuedComponent &amp;&amp; !(iComponent instanceof IImage) &amp;&amp; !(iComponent instanceof IInput)) {\n      content += ((IValuedComponent) iComponent).getApiValue() + \"\\n\";\n    }\n    List components = iComponent.getApiChildren();\n    for (ICanvasComponent current_child : components) {\n      content += addTextsToContent(current_child);\n    }\n    return content;\n  }\n\n  @Override\n  public String getName() {\n    return \"Test Plugin\";\n  }\n}\n<\/pre>\n<h2><a id=\"deploy-plugin\"><\/a>Despliegue<\/h2>\n<p>Una vez terminado tu c\u00f3digo, tienes que exportarlo como archivo JAR para crear un plugin instalable v\u00e1lido en Justinmind. Haz clic con el bot\u00f3n derecho en tu proyecto de plugin y selecciona Exportar. Selecciona Archivo JAR en Java y haz clic en Siguiente.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-14303\" src=\"https:\/\/www.justinmind.com\/wp-content\/uploads\/2021\/02\/select-jar-justinmindsdk.png\" alt=\"selectjar-justinmindsdk\"><\/p>\n<p>Selecciona un destino de exportaci\u00f3n dejando todas las dem\u00e1s opciones por defecto y pulsa Finalizar.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-14303\" src=\"https:\/\/www.justinmind.com\/wp-content\/uploads\/2021\/02\/export-plugin-justinmindsdk.png\" alt=\"export-justinmindsdk\"><\/p>\n<h2><a id=\"install-plugin\"><\/a>Instalar y ejecutar<\/h2>\n<p>Una vez que tengamos nuestro plugin empaquetado en un archivo JAR, tenemos que instalarlo en nuestra aplicaci\u00f3n Justinmind para poder ejecutarlo. Abre Justinmind y abre el men\u00fa Plug-ins. Selecciona la opci\u00f3n Instalar un Plug-in&#8230; Selecciona el archivo JAR exportado que contiene tu plugin y haz clic en Abrir. Despu\u00e9s de este punto tu plugin se instalar\u00e1 y aparecer\u00e1 una nueva opci\u00f3n en el men\u00fa Plug-ins con el nombre que elegiste al implementar tu plugin. Para Ejecutarlo s\u00f3lo tienes que hacer clic sobre \u00e9l.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inicia la aplicaci\u00f3n Eclipse dentro de tu carpeta JustinmindSDK. A continuaci\u00f3n, selecciona una carpeta para guardar tu espacio de trabajo y haz clic en \u00abUsar esta&#8230;<\/p>\n","protected":false},"author":18,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8431,8460],"tags":[],"class_list":["post-124714","post","type-post","status-publish","format-standard","hentry","category-guia-del-usuario","category-api-y-plugins"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/posts\/124714"}],"collection":[{"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/comments?post=124714"}],"version-history":[{"count":1,"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/posts\/124714\/revisions"}],"predecessor-version":[{"id":126154,"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/posts\/124714\/revisions\/126154"}],"wp:attachment":[{"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/media?parent=124714"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/categories?post=124714"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.justinmind.com\/es\/wp-json\/wp\/v2\/tags?post=124714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}