2016-07-27 3 views
1

WindowBuilderを使用してEclipseでGUI上で作業し、ロードブロッキングを実行しました。動的にJTextAreasを作成しますか?

人配列の人のリストを表示するためのドロップダウンボックスを持つJWindowを作成しました。

public class Person { 
    String name; 
    int age; 
    ArrayList<Goal> goals; 
} 

public class Goal { 
    String name; 
    int daysToComplete; 
} 

このJWindow GUI内のドロップダウンボックスには、すべてのPersonインスタンスが一覧表示されます。私は人を選択すると(のがボブを言わせて) - 私は動的例えば、ボブの属性値を一覧表示するラベルとJTextAreasを作成したい:

Name: Bob 
Age: 20 
Goals: 
    - Goal 1, complete in X days 
    - Goal 2, complete in Y days 

など..私は静的に3を追加する必要はありませんPersonの構造が将来変更される可能性があるため、ラベル(名前、年齢、目標)とそれぞれのJTextAreas(Bob、20、Goal 1/Goal 2)

これを行うにはどのような方法が最適ですか?

ありがとうございます!

+0

あなたはすべてのPerson情報を単一の 'JTextArea'に保存できませんか? – mayha

+0

ユーザーは個人情報を更新して変更することができます(そして、それを配列に戻して保存する必要があります)ので、大きなJTAが妥当ではないと思います。 – Hazim

+0

私はあなたが探しているものは[Reflection](https://docs.oracle.com/javase/tutorial/reflect/)だと思います - 私はあなたを助けることができないようにそれとの経験はありません:/ – mayha

答えて

0

正しく理解していれば、匿名のインスタンスJLabelJTextAreaを作成し、それらを配列リストに入れることで、必要なものを手に入れることができます。私はあなたの環境の詳細を知らないが、うまくいけば、あなたのアイデアに従うことができます。そして、

ArrayList<JLabel> nameLabelList = new ArrayList<JLabel>(); 
ArrayList<JLabel> ageLabelList = new ArrayList<JLabel>(); 
ArrayList<Goal> goalList = new ArrayList<Goal>(); 

// Event handler method 

public void personSelected(person) 
{ 
    nameLabelList.add(person.name); 
    ageLabelList.add(person.age); 
    // This assumes each person has a single goal. You can adapt the code 
    // for multiple goals easily 
    goalLabelList.add(person.goal); 
} 

を、リストが作成された後、あなたがしなければならないすべては、これらの配列リストをループし、それらを吐き出しますあなたのUIに:

for(int counter = 0; counter < nameLabelList.size; counter++) 
{ 
    myContainer.add(nameLabelList.get(counter)); 
    myContainer.add(ageLabelList.get(counter)); 
    myContainer.add(new JLabel(goalList.get(counter).toString())); 
} 

配列リストの内容を追加した後、彼らはUIに表示されていることを確認します:

myContainer.revalidate(); 
    myContainter.repaint(); 
0

あなたのメインパネルに新しいパネルを追加する必要があります。したがって、メインパネルにスクロール可能な内側のパネルを追加し、新しいパネルを追加する必要があります。あなたがHTMLとテーブルを使って作業したことがあれば、私が何を話しているのか理解できます。 この属性表示パネル(内部パネル)を取得したら、forループを使用して、必要な数の属性をその中にロードできます。 goalArray - > attribute-show-panelに新しいlinePanelを追加すると、コードは技術的には同じようになります。 linePanelはラベル、abuttonなどを保存していますが、多くのラインパネルは垂直方向にリストされます

関連する問題