2016-12-14 13 views
1

データモデルは、

GUI example

私は、前の例に似たGUIを紹介したいと思います。左側

  • 段落単語(ストリング)の コレクションを含む段落クラスのインスタンス)のコレクションがあります。ご覧のとおり、本文には、のハイライトテキスト部分(緑、オレンジ、青)があります。
  • テキスト断片は、コンクリート段落からの単語のサブコレクションです。右側
  • 事実ファクトクラスのインスタンス)のコレクションがあります。
  • ファクトは、少なくとも1つのテキストフラグメント(ファクト#2など)が関連付けられています。

コードの断片:

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

public class Fact { 
    private String text; 
    … 
} 

私は(ユーザーは=>例えば、対応することが可能になるテキスト断片をクリックすることができ、これはインタラクティブなGUIになることを願っポップアップされた/ユーザは、事実=をクリックすることができる>例えば、対応するテキスト断片のみが強調表示される)。これにより

、各テキスト断片が対応事実およびその逆を知っている必要があります。

どのようにテキストフラグメントとJavaの対応する事実との関連性を達成し、適切なデータ構造は何ですか?

これは、GUI実装ではなく、このリンケージのデータモデルを意味します。単語数はテキスト断片の数よりはるかに多いと思います。

+0

http:// stackoverflow。com/questions/9783020/bidirectional-map –

+0

@ PM77-1はい、私が必要とする双方向マップのようなものです。実際、**テキスト断片**のデータ構造の提案には問題があります。この情報を扱うには?私は特別な**クラス**を各文字列**単語**について考えていますが、単語の大部分はテキスト断片の一部ではありません。 – David

+0

@ user3437460はい、具体的な**テキスト断片**から**事実**への参照を意味する場合。 – 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

ありがとうございますが、私は**段落**の異なる見解を持っていると思います。この文脈の**段落**は、** words **のコレクションのラッパーのようなものです。 **事実**は**段落**とは関係ありませんが、段落のいくつかの言葉にのみ関連しています。私のexmpleから* Fact#1 *は** 7に関連しています。 **最初の段落**からの単語**。申し訳ありませんが、私のイントロ記述からはっきりと分かりません。 – David

+0

@David私は、読みやすいように短い名前を使用しようとしました。それが段落全体であるということを意味するわけではありません。そうでなければ、開始位置と終了位置は含めませんでした。わかりやすくするために名前を編集しました。 – user3437460