Java 带有渲染器的Jtable中未显示图像
我已经为我的表创建了CellRenderer。 如果图像尺寸较小,则效果良好。 但是,如果它有点大,它会显示空白Java 带有渲染器的Jtable中未显示图像,java,swing,jtable,imageicon,tablecellrenderer,Java,Swing,Jtable,Imageicon,Tablecellrenderer,我已经为我的表创建了CellRenderer。 如果图像尺寸较小,则效果良好。 但是,如果它有点大,它会显示空白 public class ImageRenderer extends DefaultTableCellRenderer { JLabel lbl = new JLabel(); JButton bouton ; List<Commentaire> liste; ImageIcon icon ; Commentaire commentaire;
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);
}
}
公共类ImageRenderer扩展了DefaultTableCellRenderer{
JLabel lbl=新的JLabel();
布顿;
列表列表;
图像图标;
评论评论;
//将每行的高度增加50%,这样我们就可以看到整个场景
//形象。
公共图像渲染器(){
liste=new CommentaireDAO().findCommentaire();
}
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔值、,
布尔值(焦点、整数行、整数列){
如果(列==0){
int id=(int)值;
客户端c=new ClientDAO().findClientById(id);
InputStream photo=c.getPhoto();
试一试{
如果(照片!=null){
int size=photo.available();
字节[]图像字节=新字节[大小];
照片读取(imageBytes);
ImageIcon图标=新的ImageIcon(imageBytes);
Image img=icon.getImage();
BuffereImage bi=新的BuffereImage(img.getWidth(null)、img.getHeight(null)、BuffereImage.TYPE\u INT\u ARGB);
Graphics g=bi.createGraphics();
g、 drawImage(img,0,0,50,50,null);
ImageIcon newIcon=新的ImageIcon(bi);
lbl.设置尺寸(250250);
lbl.设置水平对齐(中心);
lbl.setIcon(newIcon);
}否则{
System.out.println(“照片为空”);
}
}捕获(IOEX异常){
Logger.getLogger(OffreClientGUI.class.getName()).log(Level.SEVERE,null,ex);
}
}
是否有任何方法可以调整图像大小以适合列?渲染器中的代码应该非常快速高效。您不应该在每次渲染单元格时都进行创建图像的处理 相反,您应该在TableModel中存储一个ImageIcon。然后您重写TableModel的
getColumnClass(…)
方法以返回Icon.class
,JTable将使用图标的默认表呈现器
如果要动态缩放图标,可以在TableModel中添加一个图标。查看如何调整图像大小。我不确定正确渲染的大小。可能需要使用它