带有渲染器的 Jtable 中未显示图像
Image not showing in Jtable with renderer
我已经为我的 table 创建了一个 CellRenderer。
如果图像尺寸较小,则效果很好。
但是,如果它有点大,它会显示空白 space
public class ImageRenderer extends DefaultTableCellRenderer {
JLabel lbl = new JLabel();
JButton bouton ;
List<Commentaire> liste;
ImageIcon icon ;
Commentaire commentaire;
// Increase the height of each row by 50% so we can see the whole
// image.
public ImageRenderer() {
liste= new CommentaireDAO().findCommentaire();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
if (column==0){
int id = (int)value;
Client c = new ClientDAO().findClientById(id);
InputStream photo= c.getPhoto();
try {
if (photo != null) {
int size = photo.available();
byte[] imageBytes = new byte[size];
photo.read(imageBytes);
ImageIcon icon = new ImageIcon(imageBytes);
Image img = icon.getImage();
BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
g.drawImage(img, 0, 0, 50, 50, null);
ImageIcon newIcon = new ImageIcon(bi);
lbl.setSize(250,250);
lbl.setHorizontalAlignment(CENTER);
lbl.setIcon(newIcon);
}else{
System.out.println("photo null");
}
} catch (IOException ex) {
Logger.getLogger(OffreClientGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
有什么方法可以调整图像的大小以适合列?
渲染器中的代码应该非常快速和高效。您不应该在每次渲染单元格时都进行处理以创建图像。
相反,您应该在 TableModel 中存储一个 ImageIcon。然后,您将 TableModel 的 getColumnClass(...)
方法重写为 return Icon.class
,JTable 将为图标使用默认的 table 渲染器。
如果您想动态缩放图标,您可以向 TableModel 添加一个 Stretch Icon。
我已经为我的 table 创建了一个 CellRenderer。 如果图像尺寸较小,则效果很好。 但是,如果它有点大,它会显示空白 space
public class ImageRenderer extends DefaultTableCellRenderer {
JLabel lbl = new JLabel();
JButton bouton ;
List<Commentaire> liste;
ImageIcon icon ;
Commentaire commentaire;
// Increase the height of each row by 50% so we can see the whole
// image.
public ImageRenderer() {
liste= new CommentaireDAO().findCommentaire();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
if (column==0){
int id = (int)value;
Client c = new ClientDAO().findClientById(id);
InputStream photo= c.getPhoto();
try {
if (photo != null) {
int size = photo.available();
byte[] imageBytes = new byte[size];
photo.read(imageBytes);
ImageIcon icon = new ImageIcon(imageBytes);
Image img = icon.getImage();
BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
g.drawImage(img, 0, 0, 50, 50, null);
ImageIcon newIcon = new ImageIcon(bi);
lbl.setSize(250,250);
lbl.setHorizontalAlignment(CENTER);
lbl.setIcon(newIcon);
}else{
System.out.println("photo null");
}
} catch (IOException ex) {
Logger.getLogger(OffreClientGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
有什么方法可以调整图像的大小以适合列?
渲染器中的代码应该非常快速和高效。您不应该在每次渲染单元格时都进行处理以创建图像。
相反,您应该在 TableModel 中存储一个 ImageIcon。然后,您将 TableModel 的 getColumnClass(...)
方法重写为 return Icon.class
,JTable 将为图标使用默认的 table 渲染器。
如果您想动态缩放图标,您可以向 TableModel 添加一个 Stretch Icon。