How do I convert NetBeans form and its class to something usable in IntelliJ IDEA form editor?

15,481

IntelliJ IDEA doesn't support NetBeans forms, you can try to use the create snapshot feature that can save IDEA form file from a dialog of the running application.

However, much more convenient solution would be to use JFormDesigner which has IntelliJ IDEA plug-in and can convert NetBeans form files. Note that this tool is commercial and will cost you money, but it's free to try.

Share:
15,481

Related videos on Youtube

expert
Author by

expert

My interests: scala kotlin java deep-learning machine-learning reactive-programming scala-cats project-reactor scalability reverse-engineering peer-to-peer. Back in 2005 I created Morpheus, the most popular file sharing application in North America. I also designed and built Dell Digital Delivery (similar to Steam for non-games) which is installed on every Dell PC world-wide and worked on improving architecture of Fivetran. Currently I'm building super-fast hybrid (batching/realtime) data integration pipeline at bitparticles.

Updated on June 03, 2022

Comments

  • expert
    expert about 2 years

    I apologize for perhaps naive question but I couldn't find an answer online.

    I've got some UI code that was created in NetBeans. Unfortunately I don't know what version was used. My understanding is that IntelliJ IDEA (v11 in my case) doesn't support NetBeans forms.

    Can I convert the form to something usable in IDEA's form editor ? Content of form's XML file looks lie this:

    <?xml version="1.1" encoding="UTF-8" ?>
    
    <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
      <NonVisualComponents>
        <Component class="javax.swing.JLabel" name="jLabel3">
          <Properties>
            <Property name="text" type="java.lang.String" value="jLabel3"/>
          </Properties>
        </Component>
        <Menu class="javax.swing.JMenuBar" name="menuBar">
          <SubComponents>
            <Menu class="javax.swing.JMenu" name="fileMenu">
              <Properties>
                <Property name="mnemonic" type="int" value="102"/>
                <Property name="text" type="java.lang.String" value="File"/>
              </Properties>
              <SubComponents>
                <MenuItem class="javax.swing.JMenuItem" name="openMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="111"/>
                    <Property name="text" type="java.lang.String" value="Open"/>
                  </Properties>
                </MenuItem>
                <MenuItem class="javax.swing.JMenuItem" name="saveMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="115"/>
                    <Property name="text" type="java.lang.String" value="Save"/>
                  </Properties>
                </MenuItem>
                <MenuItem class="javax.swing.JMenuItem" name="saveAsMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="97"/>
                    <Property name="text" type="java.lang.String" value="Save As ..."/>
                    <Property name="displayedMnemonicIndex" type="int" value="5"/>
                  </Properties>
                </MenuItem>
                <MenuItem class="javax.swing.JMenuItem" name="exitMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="120"/>
                    <Property name="text" type="java.lang.String" value="Exit"/>
                  </Properties>
                  <Events>
                    <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="exitMenuItemActionPerformed"/>
                  </Events>
                </MenuItem>
              </SubComponents>
            </Menu>
            <Menu class="javax.swing.JMenu" name="editMenu">
              <Properties>
                <Property name="mnemonic" type="int" value="101"/>
                <Property name="text" type="java.lang.String" value="Edit"/>
              </Properties>
              <SubComponents>
                <MenuItem class="javax.swing.JMenuItem" name="cutMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="116"/>
                    <Property name="text" type="java.lang.String" value="Cut"/>
                  </Properties>
                </MenuItem>
                <MenuItem class="javax.swing.JMenuItem" name="copyMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="121"/>
                    <Property name="text" type="java.lang.String" value="Copy"/>
                  </Properties>
                </MenuItem>
                <MenuItem class="javax.swing.JMenuItem" name="pasteMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="112"/>
                    <Property name="text" type="java.lang.String" value="Paste"/>
                  </Properties>
                </MenuItem>
                <MenuItem class="javax.swing.JMenuItem" name="deleteMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="100"/>
                    <Property name="text" type="java.lang.String" value="Delete"/>
                  </Properties>
                </MenuItem>
              </SubComponents>
            </Menu>
            <Menu class="javax.swing.JMenu" name="helpMenu">
              <Properties>
                <Property name="mnemonic" type="int" value="104"/>
                <Property name="text" type="java.lang.String" value="Help"/>
              </Properties>
              <SubComponents>
                <MenuItem class="javax.swing.JMenuItem" name="contentsMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="99"/>
                    <Property name="text" type="java.lang.String" value="Contents"/>
                  </Properties>
                </MenuItem>
                <MenuItem class="javax.swing.JMenuItem" name="aboutMenuItem">
                  <Properties>
                    <Property name="mnemonic" type="int" value="97"/>
                    <Property name="text" type="java.lang.String" value="About"/>
                  </Properties>
                </MenuItem>
              </SubComponents>
            </Menu>
          </SubComponents>
        </Menu>
      </NonVisualComponents>
      <Properties>
        <Property name="defaultCloseOperation" type="int" value="3"/>
        <Property name="title" type="java.lang.String" value="My Reporting"/>
      </Properties>
      <SyntheticProperties>
        <SyntheticProperty name="menuBar" type="java.lang.String" value="menuBar"/>
        <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
      </SyntheticProperties>
      <AuxValues>
        <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
        <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
        <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
        <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
        <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
      </AuxValues>
    
      <Layout>
        <DimensionLayout dim="0">
          <Group type="103" groupAlignment="0" attributes="0">
              <Group type="102" attributes="0">
                  <EmptySpace max="-2" attributes="0"/>
                  <Group type="103" groupAlignment="0" attributes="0">
                      <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
                      <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
                      <Group type="102" alignment="1" attributes="0">
                          <Component id="dataRequestButton" min="-2" max="-2" attributes="0"/>
                          <EmptySpace min="99" pref="99" max="99" attributes="0"/>
                      </Group>
                  </Group>
                  <EmptySpace max="-2" attributes="0"/>
                  <Group type="103" groupAlignment="0" attributes="0">
                      <Component id="downloadButton" min="-2" max="-2" attributes="0"/>
                      <Component id="answersLoaded" alignment="0" min="-2" max="-2" attributes="0"/>
                      <Component id="answersToLoad" alignment="0" min="-2" max="-2" attributes="0"/>
                  </Group>
                  <EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
              </Group>
              <Component id="statusLabel" alignment="0" pref="574" max="32767" attributes="0"/>
              <Group type="102" alignment="0" attributes="0">
                  <EmptySpace min="-2" pref="32" max="-2" attributes="0"/>
                  <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
                  <EmptySpace pref="493" max="32767" attributes="0"/>
              </Group>
              <Group type="102" alignment="0" attributes="0">
                  <EmptySpace max="-2" attributes="0"/>
                  <Component id="jScrollPane1" pref="534" max="32767" attributes="0"/>
                  <EmptySpace max="-2" attributes="0"/>
              </Group>
          </Group>
        </DimensionLayout>
        <DimensionLayout dim="1">
          <Group type="103" groupAlignment="0" attributes="0">
              <Group type="102" alignment="0" attributes="0">
                  <EmptySpace max="-2" attributes="0"/>
                  <Group type="103" groupAlignment="0" attributes="0">
                      <Group type="102" alignment="1" attributes="0">
                          <Component id="answersLoaded" min="-2" max="-2" attributes="0"/>
                          <EmptySpace max="-2" attributes="0"/>
                          <Component id="answersToLoad" min="-2" max="-2" attributes="0"/>
                      </Group>
                      <Group type="102" alignment="1" attributes="0">
                          <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
                          <EmptySpace max="-2" attributes="0"/>
                          <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
                      </Group>
                  </Group>
                  <EmptySpace max="-2" attributes="0"/>
                  <Group type="103" groupAlignment="0" attributes="0">
                      <Component id="dataRequestButton" alignment="0" min="-2" max="-2" attributes="0"/>
                      <Component id="downloadButton" alignment="0" min="-2" max="-2" attributes="0"/>
                  </Group>
                  <EmptySpace type="separate" max="-2" attributes="0"/>
                  <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
                  <EmptySpace max="-2" attributes="0"/>
                  <Component id="jScrollPane1" pref="316" max="32767" attributes="0"/>
                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
                  <Component id="statusLabel" min="-2" max="-2" attributes="0"/>
              </Group>
          </Group>
        </DimensionLayout>
      </Layout>
      <SubComponents>
        <Component class="javax.swing.JLabel" name="jLabel1">
          <Properties>
            <Property name="text" type="java.lang.String" value="Answer data loaded until"/>
          </Properties>
        </Component>
        <Component class="javax.swing.JLabel" name="answersLoaded">
          <Properties>
            <Property name="text" type="java.lang.String" value="&lt;nothing loaded&gt;"/>
          </Properties>
        </Component>
        <Component class="javax.swing.JLabel" name="jLabel2">
          <Properties>
            <Property name="text" type="java.lang.String" value="Unloaded answers at the server"/>
          </Properties>
        </Component>
        <Component class="javax.swing.JLabel" name="answersToLoad">
          <Properties>
            <Property name="text" type="java.lang.String" value="&lt;nothing available&gt;"/>
          </Properties>
        </Component>
        <Component class="javax.swing.JButton" name="downloadButton">
          <Properties>
            <Property name="text" type="java.lang.String" value="Download ready data"/>
          </Properties>
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="downloadButtonActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JLabel" name="statusLabel">
          <Properties>
            <Property name="text" type="java.lang.String" value="Ready"/>
            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
              <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
                <EtchetBorder/>
              </Border>
            </Property>
          </Properties>
        </Component>
        <Component class="javax.swing.JButton" name="dataRequestButton">
          <Properties>
            <Property name="text" type="java.lang.String" value="Request data"/>
          </Properties>
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="dataRequestButtonActionPerformed"/>
          </Events>
        </Component>
        <Container class="javax.swing.JScrollPane" name="jScrollPane1">
    
          <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
          <SubComponents>
            <Component class="javax.swing.JTable" name="engineTable">
              <Properties>
                <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
                  <Table columnCount="4" rowCount="4">
                    <Column editable="true" title="Title 1" type="java.lang.Object"/>
                    <Column editable="true" title="Title 2" type="java.lang.Object"/>
                    <Column editable="true" title="Title 3" type="java.lang.Object"/>
                    <Column editable="true" title="Title 4" type="java.lang.Object"/>
                  </Table>
                </Property>
                <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
                  <TableColumnModel selectionModel="0">
                    <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
                      <Title/>
                      <Editor/>
                      <Renderer/>
                    </Column>
                    <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
                      <Title/>
                      <Editor/>
                      <Renderer/>
                    </Column>
                    <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
                      <Title/>
                      <Editor/>
                      <Renderer/>
                    </Column>
                    <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
                      <Title/>
                      <Editor/>
                      <Renderer/>
                    </Column>
                  </TableColumnModel>
                </Property>
                <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
                  <TableHeader reorderingAllowed="true" resizingAllowed="true"/>
                </Property>
              </Properties>
            </Component>
          </SubComponents>
        </Container>
        <Component class="javax.swing.JLabel" name="jLabel4">
          <Properties>
            <Property name="text" type="java.lang.String" value="Engines"/>
          </Properties>
        </Component>
      </SubComponents>
    </Form>
    

    Thanks a lot.

    • Jonathan Spooner
      Jonathan Spooner over 12 years
      Have you tried a copy/paste of the code? I've never done this before I would imagine that it would work.
    • expert
      expert over 12 years
      .java class that comes with .form ? Where should I copy-paste it ?
    • Jonathan Spooner
      Jonathan Spooner over 12 years
      You would have to create a class with the same name in the same package in IntelliJ and then copy/paste the code from your class into that one. You could also try just opening the file in IntelliJ and see if IntelliJ will open it (it should). The code generated by NetBeans is valid Java code and will work without the .form file. The .form file is there to facilitate the GUI editor and is not needed/used to compile the .java class.
    • expert
      expert over 12 years
      Ah ok, I should have said in the post that I want to use Form Designer to modify NetBeans form (or something that will be generated from it). I updated my question.
    • Jonathan Spooner
      Jonathan Spooner over 12 years
      Ah, I see. Well you could discover this by creating a similar form with Form Designer and compare the output of both. It would be a good learning exercise. Another thing to seriously consider is doing without the GUI designers all together. I find that they only get in the way (case in point).
    • kaptan
      kaptan over 2 years
      I know this is an old question, but did you find a way to convert netbeans forms to intellij forms?
  • expert
    expert over 12 years
    Yesterday I tried JFormDesigner 5.0.0 and it was crashing in IDEA 11. But version 5.0.2 works fine. I'll stick with it. Thanks!
  • Muhammad Younas
    Muhammad Younas over 7 years
    let suppose I build one from during its evaluation period and if licence expire than will that form will still working or I can not modify it?