2016-12-14 59 views
1

GUI example数据模型


我想介绍类似于前面示例的GUI。

  • 在左侧,有段落(在段落类的实例)包含一个 集合(弦乐)的集合。正如你所看到的 - 在文字中,有高亮文本片段(绿色,橙色,蓝色)
  • 文本片段是来自具体段落的字的子集合。
  • 在右侧,也有事实(在事实类的实例)的集合。
  • 每个事实与至少一个文本片段(可能更多 - 例如事实#2)相关联。

代码片段:

public class Paragraph { 
    private List<String> words; 
    … 
} 

public class Fact { 
    private String text; 
    … 
} 

我希望,这将是一个交互GUI(用户可以点击该文本片段=>例如对应实际上将是弹出窗口/用户可以点击事实=>例如只有相应的文本片段保持突出显示)。

由于这个原因,每个文本片段必须知道相应的事实,反之亦然。

如何在Java中实现文本片段与相应事实之间的联系以及什么是合适的数据结构?

我的意思是这个连接的数据模型,而不是GUI的实现。我认为单词数量远远高于文本片段的数量。

+0

http:// stackoverflow。com/questions/9783020 /双向地图 –

+0

@ PM77-1是的,类似于我需要的双向地图。实际上,我对**文本片段的数据结构提议存在问题。如何处理这些信息?我为每个String **单词**考虑特殊**类**,但大部分单词不是某些文本片段的一部分。 – David

+0

@ user3437460是的,如果你是指从具体的**文本片段**返回到** fact **。 – David

回答

1

假设1个事实可以有多个段落,但1个段落只能属于1个事实。我将实现类,就像这样:

class Fact{ 

    private ArrayList<ParagraphText> paraTexts; 
    private String text;   
    //any other attributes 

    public Fact(){ 
     //initialization.. 
    } 

    public void addParaText(ParagraphText p){ 
     paraTexts.add(p); 
     p.linkWithFact(this); //remember which fact p belongs to 
    } 

    public void removeParaText(ParagraphText p){ 
     if(paraTexts.contains(p)){ 
      p.unlinkFact(); 
      paraTexts.remove(p); 
     } 
    } 
} 

只要添加一个段落文本的事实,该段的文字本身记住它所属的事实。

class ParagraphText{ 

    private int startPos; 
    private int endPos; 
    private Fact fact; 
    //any other attributes 

    public ParagraphText(int startPos, int endPos){ 
     this.startPos = startPos; 
     this.endPos = endPos; 
     //any other initializations 
    } 

    public void linkWithFact(Fact fact){ 
     this.fact = fact; 
    } 

    public void unlinkFact(){ 
     this.fact = null; 
    } 
} 
+0

@David让我知道它是否有帮助。 – user3437460

+0

谢谢,但我认为我们对**段**有不同的看法。在这个上下文中的**段落**只是像**字样**的包装的包装物。 **事实**与整个**段**无关,但仅与段落的某些词相关。我的例子中的*事实#1 *与** 7有关。和8.第**段的第**段**。对不起,也许从我的介绍描述中看不清楚。 – David

+0

@David我试图使用较短的名称来提高可读性。这并不意味着它是整个段落,否则我不会包括开始和结束位置。为了清晰起见,我编辑了命名。 – user3437460