Я пишу программу для игры в карты. Я уже делал игру и эффективно ее воспроизводил, но теперь я решил добавить образы карт (сейчас это работает, но с использованием имен карточек, таких как «As of Spades», вместо значка для их представления).Java - рендеринг изображения в JTable
В моей программе я использую 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);
Где "C:\\Users\\DeRipper\\Pictures\\Naipes\\oros_1s.jpg"
путь к файлу карты. Я сначала тестировал свой код, помещая одно и то же изображение карты для всех ячеек.
На первый взгляд я получил желаемый результат, изображения отображались правильно, но при нажатии на них пару раз таблица будет прекратить предоставление их и вместо этого показал значение toString()
изображений:
И то изображения не будет отображаться на столе снова. Мне просто нужно, чтобы пользователь мог нажимать на изображения и не исчезать.
Хорошо, спасибо за чтение.
DeR.