2012-01-01 29 views
1

所以我习惯建立一个JTree加入DefaultMutableTreeNode的模型,但现在我有很多条目属于1 JTree有没有更简单的方法来做到这一点可能像你做一个丝毫JList在那里你可以指定一个String table[] = {};JTree,很多条目

"<html> <b>Shield Hardners</b> </html>", 
" Ballistic Deflection Array", 
" Explosion Dampening Array", 
" Heat Dissipation Array", 
" Photon Scattering Array", 
"<html> <b>Hangar Arrays</b> </html>", 
" Corporate Hangar Array", 
"<html> <b>Ship Maintnance Bays</b> </html>", 
" Capital Ship Maintenance Array", 
" Ship Maintenance Array", 
"<html> <b>Silos</b> </html>", 
" Biochemical Silo", 
" Catalyst Silo", 
" Coupling Array", 
" General Storage", 
" Hazardous Chemical Silo", 
" Silo", 
"<html> <b>Assembly Arrays</b> </html>", 
" Advanced Large Ship Assembly Array", 
" Advanced Medium Ship Assembly Array", 
" Advanced Small Ship Assembly Array", 
" Ammunition Assembly Array", 
" Capital Ship Assembly Array", 
" Component Assembly Array", 
" Drone Assembly Array", 
" Efficient Equipment Assembly Array", 
" Large Ship Assembly Array", 
" Medium Ship Assembly Array", 
" Rapid Equipment Assembly Array", 
" Small Ship Assembly Array", 
"<html> <b>Mobile Laboratory</b> </html>", 
" Advanced Mobile Laboratory", 
" Drug Lab", 
" Mobile Laboratory", 
"<html> <b>Moon Harvester</b> </html>", 
" Moon Harvesting Array", 
" Moon Harvesting Array II", 
"<html> <b>Reactor Arrays</b> </html>", 
" Biochemical Reactor Array", 
" Complex Reactor Array", 
" Medium Biochemical Reactor Array", 
" Simple Reactor Array", 
"<html> <b>Refining Arrays</b> </html>", 
" Intensive Refining Array", 
" Medium Intensive Refining Array", 
" Refining Array", 
"<html> <b>Sov Modules</b> </html>", 
" Cynosural Generator Array", 
" Cynosural System Jammer", 
" Jump Bridge", 
" System Scanning Array", 
"<html> <b>Electronic Warfare</b> </html>", 
" Dread Guristas Ion Field Projection Battery", 
" Guristas Ion Field Projection Battery", 
" Ion Field Projection Battery", 
" Dread Guristas Phase Inversion Battery", 
" Guristas Phase Inversion Battery", 
" Phase Inversion Battery", 
" Dread Guristas Spatial Destabilization Battery", 
" Guristas Spatial Destabilization Battery", 
" Spatial Destabilization Battery", 
" Dread Guristas White Noise Generation Battery", 
" Guristas White Noise Generation Battery", 
" White Noise Generation Battery", 
" Sensor Dampening Battery", 
" Serpentis Sensor Dampening Battery", 
" Shadow Serpentis Sensor Dampening Battery", 
" Stealth Emitter Array", 
" Serpentis Warp Disruption Battery", 
" Shadow Warp Disruption Battery", 
" Warp Disruption Battery", 
" Serpentis Warp Scrambling Battery", 
" Shadow Warp Scrambling Battery", 
" Warp Scrambling Battery", 
" Angel Stasis Webification Battery", 
" Domination Stasis Webification Battery", 
" Stasis Webification Battery", 
"<html> <b>Energy Neutralizers</b> </html>", 
" Blood Energy Neutralizing Battery", 
" Dark Blood Energy Neutralizing Battery", 
" Energy Neutralizing Battery", 
" Sansha Energy Neutralizing Battery", 
" True Sansha Energy Neutralizing Battery", 
"<html> <b>Hybrid Battery</b> </html>", 
" Large Blaster Battery", 
" Serpentis Large Blaster Battery", 
" Shadow Large Blaster Battery", 
" Medium Blaster Battery", 
" Serpentis Medium Blaster Battery", 
" Shadow Medium Blaster Battery", 
" Small Blaster Battery", 
" Serpentis Small Blaster Battery", 
" Shadow Small Blaster Battery", 
" Large Railgun Battery", 
" Serpentis Large Railgun Battery", 
" Shadow Large Railgun Battery", 
" Medium Railgun Battery", 
" Serpentis Medium Railgun Battery", 
" Shadow Medium Railgun Battery", 
" Small Railgun Battery", 
" Serpentis Small Railgun Battery", 
" Shadow Small Railgun Battery", 
"<html> <b>Laser Battery</b> </html>", 
" Large Pulse Laser Battery", 
" Blood Large Pulse Laser Battery", 
" Dark Blood Large Pulse Laser Battery", 
" Sansha Large Pulse Laser Battery", 
" True Sansha Large Pulse Laser Battery", 
" Medium Pulse Laser Battery", 
" Blood Medium Pulse Laser Battery", 
" Dark Blood Medium Pulse Laser Battery", 
" Sansha Medium Pulse Laser Battery", 
" True Sansha Blood Medium Pulse Laser Battery", 
" Small Pulse Laser Battery", 
" Blood Small Pulse Laser Battery", 
" Dark Blood Small Pulse Laser Battery", 
" Sansha Small Pulse Laser Battery", 
" True Sansha Blood Small Pulse Laser Battery", 
" Large Beam Laser Battery", 
" Blood Large Beam Laser Battery", 
" Dark Blood Large Beam Laser Battery", 
" Sansha Large Beam Laser Battery", 
" True Sansha Blood Large Beam Laser Battery", 
" Medium Beam Laser Battery", 
" Blood Medium Beam Laser Battery", 
" Dark Blood Medium Beam Laser Battery", 
" Sansha Medium Beam Laser Battery", 
" True Sansha Blood Medium Beam Laser Battery", 
" Small Beam Laser Battery", 
" Blood Small Beam Laser Battery", 
" Dark Blood Small Beam Laser Battery", 
" Sansha Small Beam Laser Battery", 
" True Sansha Blood Small Beam Laser Battery", 
"<html> <b>Missile Battery</b> </html>", 
" Cruise Missile Battery", 
" Dread Guristas Cruise Missile Battery", 
" Guristas Cruise Missile Battery", 
" Torpedo Battery", 
" Dread Guristas Torpedo Battery", 
" Guristas Torpedo Battery", 
" Citadel Torpedo Battery", 
" Dread Guristas Citadel Torpedo Battery", 
" Guristas Citadel Torpedo Battery", 
"<html> <b>Projectile Battery</b> </html>", 
" Large AutoCannon Battery", 
" Angel Large AutoCannon Battery", 
" Domination Large AutoCannon Battery", 
" Medium AutoCannon Battery", 
" Angel Medium AutoCannon Battery", 
" Domination Medium AutoCannon Battery", 
" Small AutoCannon Battery", 
" Angel Small AutoCannon Battery", 
" Domination Small AutoCannon Battery", 
" Large Artillery Battery", 
" Angel Large Artillery Battery", 
" Domination Large Artillery Battery", 
" Medium Artillery Battery", 
" Angel Medium Artillery Battery", 
" Domination Medium Artillery Battery", 
" Small Artillery Battery", 
" Angel Small Artillery Battery", 
" Domination Small Artillery Battery" 

所以这是直接从我的老JList的。该JTree应该是这样的:

  • 盾Hardners <父
  • :包含“HTML”标签应该是一个父节点和一个白衣缩进应是轻而易举的

    因此,它应该是这样的 线

  • >>>弹道偏转阵列<儿童
  • >>>爆炸润版阵列<儿童

我已经在一个文件puting这一点,并分析它,并打印出像这样的节点尝试:

public class Env { 
    public static void main(String[] args) 
    {   
     try { 
      Scanner input = new Scanner(new File("data.txt")); 
      String line; 
      String sub; 
      while(input.hasNextLine()) 
      { 
       line = input.nextLine(); 

       String subline = line.replace('"', ' ').substring(11).replace("</b> </html> ,", " ").trim().replace(" ", "_"); 
       if(line.contains("<html>")){ 
        System.out.println("DefaultMutableTreeNode " + subline + " = new DefaultMutableTreeNode(" + line.replace(",", " ").trim() + ");"); 
       } 
      } 

     } catch (Exception e) {} 
    } 
} 

之前,我写完代码有没有做这个简单的方法。

+0

为什么不把它打成HTML,然后让自己的魔法/转换到正确的数据结构。 – 2012-01-01 19:23:28

+0

@OmarIthawi:因为它看起来不是一个有效的HTML文件,而是在某些行上带有一些HTML标记的逗号分隔文件。 – 2012-01-01 19:25:02

+0

当您想要在JList中使用数组时,您仍然必须创建一个循环来将条目添加到数组中。所以在这里你的代码有一个循环,直接将条目添加到TreeModel。你为什么认为会有一个更简单的方法?直接将数据添加到模型会更有效率(更短?),因为您不需要使用数组的额外开销。但要回答你的问题,没有接受数组的构造函数。 – camickr 2012-01-01 19:28:18

回答

2

我只能想到使用正则表达式来“简化”字符串替换,但即使这是一个意见的问题。

import java.util.Scanner; 

public class TestFoo { 
    private static final String FILE_NAME = "data.txt"; 
    private static final String REGEX = "</?html>|</?b>|\"|,"; 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(new File(FILE_NAME)); 
     while (scan.hasNextLine()) { 
     String line = scan.nextLine(); 
     String newLine = line.replaceAll(REGEX, "").trim(); 
     if (line.contains("html")) { 
      System.out.println("Default Mut: " + newLine); 
     } else { 
      System.out.println("\t" + newLine); 
     } 
     } 
    } 
} 

你当然需要try/catch,并且不应该忽略catch块。这也将删除引号内的逗号,因此不理想。在线提供了可供下载的Java库,可以非常干净地分析逗号分隔的文件。

0

没有简短的方式 问题通过解析数据解决,如下图所示,通过为子节点添加else来解决。