多くの要素が取り込まれた Jlist を実装しています。各要素は画像に対応しているので、リストの各行内にサイズ変更されたプレビューを表示したいと思います。Jlabelを拡張するカスタムImageCellRendererを実装しました。 getListCellRendererComponentで、その要素に何もない場合はサムネイルを作成します。各行は、画像のパスと JLabel に適用されるアイコンを格納するPageクラスに対応します。各PageオブジェクトはDefaultListModel内に配置され、JList に入力されます。レンダリング コードは次のようなものです。
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
Page page = (Page) value;
if (page.getImgIcon() == null)
{
System.out.println(String.format("Creating thumbnail of %s", page.getImgFilename()));
ImageIcon icon = new ImageIcon(page.getImgFilename());
int thumb_width = icon.getIconWidth() > icon.getIconHeight() ? 128 : ((icon.getIconWidth() * 128) / icon.getIconHeight());
int thumb_height = icon.getIconHeight() > icon.getIconWidth() ? 128 : ((icon.getIconHeight() * 128) / icon.getIconWidth());
icon.setImage(getScaledImage(icon.getImage(), thumb_width, thumb_height));
page.setImgIcon(icon);
}
setIcon(page.getImgIcon());
}
セルレンダラーが呼び出されるリストで特定のアイテムのみが表示されると考えていましたが、ページオブジェクトをリストモデルに追加すると、すべてのサムネイルが作成されることがわかりました。アイテムをロードしようとしましたが、モデルを JList に設定した後、または最初にモデルを設定し、アイテムの追加を開始しましたが、結果は同じです。必要な場合にのみデータをロードする方法はありますか、それとも、各要素の可視性をチェックする内部に項目が積み重ねられた JScrollPanel のようなカスタム コントロールを作成する必要がありますか?
ありがとう