【发布时间】:2013-04-04 12:10:32
【问题描述】:
所以我有一个带有复选框的 JTable。我希望复选框在“选中”时包含一个图像,而在“未选中”时包含另一个图像(即显示图像而不是选中或未选中的框)。有没有办法做到这一点?我尝试过使用返回带有 ImageIcon 的 JLabel 的 TableCellRenderer,但它并不是非常有效。
更具体地说,当复选框被选中或取消选中时,正确的图像就在那里,但是当用户更改复选框状态(鼠标按下时)时,会出现原始选中/未选中的图像
这是我尝试过的 TableCellRenderer(我也用 JPanel 尝试过,但这也无效
public class CrassusEventTableCellEyeRenderer extends JCheckBox implements TableCellRenderer {
static Icon greyEye;
static Icon blackEye;
{//STATIC CODE BLOCK
try {
greyEye = new ImageIcon(ImageIO.read(new File("icons/shittyTest.png")));
blackEye = new ImageIcon(ImageIO.read(new File("icons/blackEye.png")));
} catch (IOException e) {
greyEye = null;
blackEye = null;
}
}
public CrassusEventTableCellEyeRenderer(){
super();
this.addItemListener(new IsCheckedItemListener());
setIcon(greyEye);
}
//commented out code that I have tried in place of the IsCheckedItemListener
/*
@Override
public void setSelected(boolean sel){
super.isSelected();
if(sel)
setIcon(blackEye);
else
setIcon(greyEye);
}
*/
public class IsCheckedItemListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent e) {
if(isSelected())
setIcon(blackEye);
else
setIcon(greyEye);
}
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
System.out.println("value: "+value+", row: "+row+", column: "+column);
if(value instanceof Boolean){
setSelected(((Boolean) value).booleanValue());
}
return this;
}
}
【问题讨论】:
-
“我试过了..”如需更好的帮助,请尽快发帖SSCCE。
-
one image when they are "checked" and another image when they are "unchecked"实现这个之后你在做什么?只是为了好玩还是您正在努力实现某些目标? B'coz 通过查看图像最终用户将无法识别它的含义。 -
@Che 在我们的界面中没有足够的空间通过复选框进行描述;我还将尝试在鼠标悬停时在光标旁边获取描述。想想photo-shop图层界面中的“眼睛”和“锁”
标签: java swing jtable jcheckbox tablecellrenderer