0

私はかなり複雑なプログラムを書いているので、問題が発生している場所の観点からのみ説明しようと思います。

私の見解では、JScrollPaneを作成して、学生が登録されているコースのリストを表示します。

registeredPane = new JScrollPane(); registeredPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
registeredPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
c.gridx = 2;
c.gridwidth = 1;
c.gridheight = 2;
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
layout.setConstraints(registeredPane, c);

次に、コントローラーで、モデルでこの関数を呼び出して、現在アクティブな学生が登録されているコースを反映するようにモデルを変更します。

public void updateCurrentStudentCourses() {
ArrayList<String> courseNames = new ArrayList<String>();

for (Course c: currentStudent.getRegCourses()) {
courseNames.add("" + c.getDepartment().getId() + c.getCode());
}

System.out.println(courseNames);
}

次に、再びコントローラーで、ArrayListをJScrollPaneに追加して、これらの変更を反映するようにビューを更新します。

public void updateView() {
view.getNameField().setText(model.getCurrentStudent().getName());

view.getRegisteredPane().removeAll();
view.getRegisteredPane().getViewport().add(model.getCurrentStudentCourses());
view.getRegisteredPane().repaint();
}

スクロールバーが消えますが、それだけです。リスト項目(私が知っているArrayListにある)は表示されません。私は何が間違っているのですか?

4

2 に答える 2

4

EDITがを返す
場合は、の内容を中に入れてから、のをそのように設定できます。次のように進めることができます:メソッドは次のようになります。model.getCurrentStudentCourses()ArrayListArrayListJTextAreaviewportJScrollPaneJTextAreaupdateView()

JTextArea ta = new JTextArea(30,100);
public void updateView() {
    ta.setText("");
    for (String course : model.getCurrentStudentCourses())
    ta.append(course+"\n");
    view.getNameField().setText(model.getCurrentStudent().getName());
    view.getRegisteredPane().setViewportView(ta);
}
于 2013-03-22T18:45:47.683 に答える
1

スクロールペインのビューを設定するには、setViewportView()を使用します。スクロールペインの子コンポーネントを直接操作すると、問題が発生します(たとえば、スクロールバーも削除します)。

スクロールペインには独自のレイアウトマネージャーがあり、スクロールペインによって作成されたコンポーネント(さまざまなビューポート、スクロールバー、コーナー)についてのみ認識します。したがって、手動で位置を設定しない限り、追加したコンポーネントは表示されません。

于 2013-03-22T18:57:58.007 に答える