Java 将图标放入JTable单元格会改变它';背色

Java 将图标放入JTable单元格会改变它';背色,java,swing,Java,Swing,我在我的jtable的单元格中放置了一些图标,但问题是它正在将其背景色更改为表的背景色…我希望它将其更改为行的背景色…而且当它被选中时,它不会显示所选内容…这是我设置图标的代码 Users user; ConsoleUsersListTbl.getColumnModel().getColumn(1).setCellRenderer(new ImageRender()); DefaultTableModel userTableModel = (DefaultTableModel)

我在我的jtable的单元格中放置了一些图标,但问题是它正在将其背景色更改为表的背景色…我希望它将其更改为行的背景色…而且当它被选中时,它不会显示所选内容…这是我设置图标的代码

 Users user;
 ConsoleUsersListTbl.getColumnModel().getColumn(1).setCellRenderer(new ImageRender());


    DefaultTableModel userTableModel = (DefaultTableModel) ConsoleUsersListTbl.getModel();

    for (int i = 0; i < userList.size()-1; i++) {

        user = userList.get(i);
        javax.swing.ImageIcon image_icon = new javax.swing.ImageIcon(user.getUser_image());
        if (image_icon.getIconWidth() > 32 || image_icon.getIconWidth() > 32) {
            InputStream in = new ByteArrayInputStream(user.getUser_image());
            BufferedImage buff_image;
            try {
                buff_image = ImageIO.read(in);
                int type = buff_image.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : buff_image.getType();
                BufferedImage resizedImage = resizeImage(buff_image, type);

                image_icon.setImage(resizedImage);
                userTableModel.setValueAt(image_icon, i, 1);

            } catch (IOException ex) {
                Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            userTableModel.setValueAt(image_icon, i, 1);
        }

我认为您需要实现所讨论和描述的自定义单元渲染器。如果当前单元格被聚焦或选中,则渲染器可以访问信息,因此您可以按任何方式调整背景、前景甚至内容。请注意,组件可能是不透明的(有自己的背景),也可能不是不透明的(父背景或其他内容通过它可见)。这是通过。

为获得更好的帮助,请使用
UIManager.getIcon(“OptionPane.errorIcon”)
而不是关于
ImageRender
的一点但更多的信息会很好…@MadProgrammer这是我的图像渲染类…在code@MadProgrammer谢谢,伙计,我已经解决了我的问题。@HaseebWali就像一个附加的
DefaultTableCellRenderer
扩展自
JLabel
本身,因此,您可以简单地调用
super.gettableCellRenderComponent
,然后调用
setIcon
,并
返回该组件。
DefaultTableCellRenderer
针对快速、低资源的渲染进行了优化,因此您应该尽可能直接利用它;)非常感谢你的回答,我必须给我的标签行颜色,并设置它的不透明度为真,以正常显示。。。。
public class ImageRender extends  DefaultTableCellRenderer {
JLabel lable = new JLabel();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    lable.setIcon((ImageIcon)value);
    lable.setOpaque(true);
    return lable;
}
}