使用以下代码在JTable单元格中显示图像。我有两个问题需要在jtable单元格中添加图像。
1.如果我点击表格中的第一行," Pointer.gif"图像将显示在该行中。当我点击第二行时,"指针.gif"图像将显示在第二行,第一行得到" Blank.Gif"然后我点击第三行,Pointer.gif将显示在第三行,第二行得到"空白.gif要点"从第一行开始。在这个时候第一行将变为空(这意味着第一行没有得到pointer.gif和blank.gif)。如何做到这一点?
2.第二个问题是,如果我选择第一行,pointer.gif将显示第一行。当我点击第二行时,pointer.gif将移动第二行,第一行得到empty.how要做此?
我的问题是,当我使用以下代码时," blank.gif"将显示在整列中。当我点击特定行时," pointer.gif"将在那个地方展示。
class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer {
ImageIcon Icon;
public Component getTableCellRendererComponent(
JTable table, Object value, boolean selected, boolean focus,
int row, int col) {
if(selected == true){
Icon=new ImageIcon(getClass().getResource("pointer.gif"));
}
else{
Icon=new ImageIcon(getClass().getResource("blank.jpg"));
}
this.setIcon(Icon);
return this;
}
}
call this class like,
table1.getColumnModel().getColumn(0).setCellRenderer(new FRM_FLXD_ICON_ASSGN());
答案 0 :(得分:2)
getTableCellRendererComponent将返回带有图标的jLabel。
class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer {
JLabel jLabel;
public Component getTableCellRendererComponent(
JTable table, Object value, boolean selected, boolean focus, int row, int col) {
jLabel = new JLabel();
if(selected == true){
jLabel.setIcon(new ImageIcon(ImageIO.read(new File("C://pointer.jpg"))));
}
else{
jLabel.setIcon(new ImageIcon(ImageIO.read(new File("C://blank.jpg"))));
}
return jLabel;
}
}
答案 1 :(得分:2)
我认为不鼓励每次渲染单元格时加载图片并消耗大量RAM。外包该代码。 如果你把你的imags包装在.jar中,getResource()是正确的。
我会这样想。
ImageIcon pointer = new ImageIcon(getClass.getResource("pointer.jpg")));
ImageIcon blank = new ImageIcon(getClass.getResource("blank.jpg")));
class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer {
JLabel jLabel;
public Component getTableCellRendererComponent(
JTable table, Object value, boolean selected, boolean focus, int row, int col) {
if(selected == true){
jLabel.setIcon(pointer);
}
else{
jLabel.setIcon();
}
return jLabel;
}
}
编辑:
也许应该是更像那样的东西
ImageIcon pointer = new ImageIcon(getClass.getResource("pointer.jpg")));
ImageIcon blank = new ImageIcon(getClass.getResource("blank.jpg")));
class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer {
JLabel jLabel;
public Component getTableCellRendererComponent(
JTable table, Object value, boolean selected, boolean focus, int row, int col) {
if(table.isColumnSelected(column)){
jLabel.setIcon(pointer);
}else{
jLabel.setIcon(blank);
}
return jLabel;
}
}
并在您的表中,您应该将它附加到您想要仅显示指针的列。
table.getColumnModel().getColumn(1).setCellRenderer(new YourRenderer());
答案 2 :(得分:2)
渲染器返回
JTable table, Object value, boolean selected, boolean focus, int row, int col
这些值中的每一个都是可测试的,其中大部分都是可设置的(需要熟悉Java ...)意味着你可以测试
Object instanceOf Whatever
selected
focus
JTable's row & col
真的要看prepareRenderer