所以,我现在可以将图像加载到我的JTable的单元格中,但由于某种原因,图形都向右移动了一个像素,这让我看到了JTable的背景。有任何想法吗?对不起,如果我的格式化关闭;仍然不完全习惯于这种标记。JTable单元格中的图像关闭一个像素?
public static void main(String[] args) {
final int rows = 16;
final int columns = 16;
final int dimTile = 32;
JFrame frame = new JFrame("test");
JTable table = new JTable(rows, columns);
table.setIntercellSpacing(new Dimension(0, 0));
table.setShowGrid(false);
table.setBackground(Color.cyan);
table.setTableHeader(null);
table.setRowHeight(dimTile);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setPreferredSize(new Dimension(rows * dimTile, columns * dimTile));
Tile tile = new Tile(0);
for(int i = 0; i < rows; i++) {
for(int j = 0; j < columns; j++) {
table.getColumnModel().getColumn(j).setCellRenderer(new MyRenderer());
table.setValueAy(tile, i, j);
}
}
JScrollPane scrollPane = new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setBorder(BorderFactory.createEmptyBorder());
frame.getContentPane().add(scrollPane);
frame.setSize(512, 512);
frame.setVisible(true);
int adjustedSizeX = frame.getInsets().left + frame.getInsets().right + 512;
int adjustedSizeY = frame.getInsets().top + frame.getInsets().bottom + 512;
frame.setSize(adjustedSizeX, adjustedSizeY);
frame.pack();
...
}
public class MyRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Tile tile = (Tile) value;
setIcon(tile.getIcon());
return this;
}
}
public class Tile {
ImageIcon icon;
public Tile(int graphic) {
icon = new ImageIcon(PATH/TO/"...test.png");
}
public ImageIcon getIcon() {
return icon;
}
}
无法通过您发布的代码重现问题。发布一些代码,可以重现您的问题,而无需任何依赖。 –
这段代码与我的项目完全一样,没有任何其他内容,会产生问题。我只使用这段代码创建了一个新项目(并且在Test类中粘贴了主要方法)来试用它。在图像之间存在可见的一个像素间隙,因为每个单元中的图像已经向右移动一个像素(切断图像的最右侧像素)。在您看来,将表格的背景颜色更改为最好的。我去了青色,但无论什么作品。 – bendicott