JScrollPane
パネルにJList mediaList
があります。リストの内容はDefaultListModel
によって維持されます。 JDBC(Sqlite 3)を使用してクエリを作成した後に新しいリストモデルを取得しましたJListのListCellRendererがDefaultListModelの適切なインデックスを表示しない
新しく生成されたモデルのサイズがサイズより大きい場合、スクロールペインがモデルの新しいインデックスを描画しないという問題に直面しています以前にフェッチされたモデル。
//コードはmediaModelの長さは3
あるときには、インデックスの下に印刷し、label.addMouseListener (new MouseAdapter() {
DefaultListModel<HashMap<String,String>> mediaModel=new DefaultListModel<>();
mediaModel=mProvider.getNextMenu(paramsCid); // new DefaultListModel
medialist = new JList(mediaModel);
medialist.setOpaque(false);
medialist.setCellRenderer(new MediaCellRenderer());
panel = new JScrollPane(medialist);
panel.setPreferredSize(new Dimension(300,300));
pane1.setOpaque(true);
});
class MediaCellRenderer implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
System.out.println("index: "+index);
JLabel menuTextLabel = new JLabel(mediaModel.get(index).get("title"));
return menuTextLabel;
}
}
がmediaModel
の長さが2
index: 0
index: 1
インデックス以下MediaCellRenderer
プリントされたときにことを観察したスニペットしかし、
index: 0
index: 1
index: 0 // it prints 0 instead of 2
誰でもこの問題を理解するのに役立つことができますか?
すぐに役立つようにするには、[MCVE]または[ショート、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。いくつかのデータをハードコードしてDBに置き換えます。 –
上記のコードのgetNextMenuは、以下の形式のDefaultListModelを提供します:HashMap fieldList = new HashMap (); listModel.addElement(fieldList); –
Kalx
* "..上のコードでは.."と説明しています。私はMCVEをもっと詳しく見ていきます。 –