我在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);
}
这是外出......
EDIT1 这是我的Image Render类;并且使setOpaque为true会使我的图标变白..
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;
}
}
答案 0 :(得分:2)
我认为您需要按照here所述实现自定义单元格渲染器,并且还需要here。如果当前单元格被聚焦或被选中,渲染器可以访问信息,因此您可以以任何方式调整背景,前景甚至内容。注意组件可能是不透明的(有自己的背景)或不是(父背景或其他内容通过它可见)。这是通过setOpaque(boolean)控制的。