Java-在JTable中渲染图像
我正在写一个玩纸牌游戏的程序。我已经让这个游戏发挥了作用,并且有效地玩了它,但是现在我决定添加卡片的图像(现在它可以工作,但是使用卡片的名称,比如“作为黑桃”,而不是一个图标来表示它们) 在我的程序中,我使用Java-在JTable中渲染图像,java,image,swing,jtable,Java,Image,Swing,Jtable,我正在写一个玩纸牌游戏的程序。我已经让这个游戏发挥了作用,并且有效地玩了它,但是现在我决定添加卡片的图像(现在它可以工作,但是使用卡片的名称,比如“作为黑桃”,而不是一个图标来表示它们) 在我的程序中,我使用JTables来组织卡,并在各种JDialogs中选择它们(一个对话框用于交换手中的卡,另一个对话框用于选择要丢弃的卡,等等) 我所尝试的,而且我个人喜欢它的工作方式,就是制作一个JTable,每个卡有8列和1行单元格。在每个单元的内部放置一张卡片的图像。然后我会选择一个单元格来选择一张卡,
JTable
s来组织卡,并在各种JDialog
s中选择它们(一个对话框用于交换手中的卡,另一个对话框用于选择要丢弃的卡,等等)
我所尝试的,而且我个人喜欢它的工作方式,就是制作一个JTable
,每个卡有8列和1行单元格。在每个单元的内部放置一张卡片的图像。然后我会选择一个单元格来选择一张卡,或者在表外使用JButtonGroup
DefaultTableModel dtModel = new DefaultTableModel(COL_NAMES, 0) {
@Override
public Class<?> getColumnClass(int column) {
if (getRowCount() > 0)
return getValueAt(0, column).getClass();
return super.getColumnClass(column);
}
};
//add the columns to the model:
if (dtModel.getColumnCount() == 0) {
for (int i = 0; i < COLS; i++) {
dtModel.addColumn(COL_NAMES[i]);
}
}
//add a row to the model:
if (dtModel.getRowCount() == 0) {
Object[] data = {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()};
dtModel.addRow(data);
}
jTable1.setModel(dtModel);
//set the size of the table, but I think I got it wrong:
jScrollPane1.setSize(400, jScrollPane1.getColumnHeader().getHeight() + jTable1.getRowHeight());
//here is the image I'm using:
ImageIcon ii = new ImageIcon("C:\\Users\\DeRipper\\Pictures\\Naipes\\oros_1s.jpg");
//the loop where I set the image in all the cells. I scale the image into a smaller size:
for (int i = 0; i < COLS; i++)
jTable1.setValueAt(new ImageIcon(ii.getImage().getScaledInstance(50, 65, Image.SCALE_DEFAULT)), 0, i);
DefaultTableModel dtModel=新的DefaultTableModel(列名称,0){
@凌驾
公共类getColumnClass(int列){
如果(getRowCount()>0)
返回getValueAt(0,列).getClass();
返回super.getColumnClass(column);
}
};
//将列添加到模型中:
if(dtModel.getColumnCount()==0){
for(int i=0;i
其中“C:\\Users\\DeRipper\\Pictures\\Naipes\\oros_1s.jpg”
是卡文件的路径。我首先测试我的代码,为所有的单元格放置相同的卡片图像
乍一看,我得到了理想的结果,图像显示正确,但当点击几次后,表格将停止渲染,而是显示图像的toString()
值:
然后图像就不会再出现在桌子上了。我只需要用户能够点击图像,而不是消失
谢谢你的阅读
德
不要将JLabel
s添加到模型中。相反,您需要添加一个ImageIcon
然后JTable
将使用图标渲染器显示图像
但是,当单击它们几次时,表将停止渲染它们,而是显示图像的“toString()”值:
如果您正在编辑单元格,那么默认编辑器只会将对象的toString()
表示形式保存回TableModel。因此,您可能希望覆盖isCellEditable(…)
方法以关闭编辑。否则,您将需要一个了解如何编辑和保存图像图标的自定义编辑器
不要将JLabel
s添加到模型中。相反,您需要添加一个ImageIcon
然后JTable
将使用图标渲染器显示图像
但是,当单击它们几次时,表将停止渲染它们,而是显示图像的“toString()”值:
如果您正在编辑单元格,那么默认编辑器只会将对象的toString()
表示形式保存回TableModel。因此,您可能希望覆盖isCellEditable(…)
方法以关闭编辑。否则,您将需要一个了解如何编辑和保存图像图标的自定义编辑器
Object[] data = {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()};
dtModel.addRow(data);