-1

Jlistを作成し、アクションリスナーを使用してそれを埋めるコードは次のとおりです

最初に、文字列の配列を使用して Jlist を埋め、スクローラーを使用しました。次に、Jlist を更新するために、Jlist のモードを DefaultListModel に変更する必要があります。その変更を行うとすぐに、スクローラーが失われました。

何が悪かったのかわからない

誰でも私を助けてくれますか

private Component makeListView() {  
        final DefaultListModel<String> listModel = new DefaultListModel<String>();
        final JList<String> list = new JList<String>(listModel);
        list.setModel(listModel);
        updateCourseListPanel(listModel);
        notifyObserverInModelForClickingOnListItem(list);       
        list.setPreferredSize(getSize());
        list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        list.setVisibleRowCount(-1);        
        list.setFixedCellWidth(80);
        JScrollPane listScroller = new JScrollPane(list);
        listScroller.setPreferredSize(getMaximumSize());
        setVisible(true);       
        return list;
    }
4

1 に答える 1

2

あなたのスニペットからはわかりにくいです(それを呼び出すコードを表示しなかったため):額面どおり、問題は追加された scrollPane の代わりにリストを返すことです。

より深刻な問題は、データを更新する必要があるたびにリストを再作成するように見えることです (ただし、詳細が不足しているため推測するだけです :-)。より良いアプローチは、リストとそのモデルの作成をその更新から分離し、必要に応じてモデルのみを更新することです。

private Component makeListView() {  
    final DefaultListModel<String> listModel = new DefaultListModel<String>();
    final JList<String> list = new JList<String>(listModel);
    list.setModel(listModel);
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
    list.setFixedCellWidth(80);
    JScrollPane listScroller = new JScrollPane(list);
    return listScroller;
 }

 private void update(Jlist list) {  
    updateCourseListPanel(list.getModel());
    notifyObserverInModelForClickingOnListItem(list);       
 }

ところで、setXXSize メソッドを決して呼び出さないでください。いくつかの理由があります。

于 2013-04-19T15:39:42.320 に答える