Это лето не настоящее лето, подумал я.Чашка кофе заставляет меня чувствовать это как лето, жесткое (смеется).
У меня есть немного непослушный JTable.О, МОЙ БОГ.Ниже мой JTable, который использует мою собственную настроенную TableModel.Вы могли видеть это по методу getColumnClass (), там ... он был сделан для возврата только как JLabel .И затем я также настраиваю DefaultRenderer .
jtbl_inGameEasy = new javax.swing.JTable();
jtbl_inGameEasy.setFont(new java.awt.Font("squeaky chalk sound", 0, 14)); // NOI18N
jtbl_inGameEasy.setForeground(new java.awt.Color(255, 255, 255));
jtbl_inGameEasy.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"null", "null", "null", "null", "null"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
public Class getColumnClass(int columnIndex) {
return JLabel.class;
}
});
jtbl_inGameEasy.setDefaultRenderer(JLabel.class, new JLabelTableRenderer());
jtbl_inGameEasy.setFocusable(false);
jtbl_inGameEasy.setOpaque(false);
jtbl_inGameEasy.setRowHeight(55);
jtbl_inGameEasy.setShowHorizontalLines(false);
jtbl_inGameEasy.setShowVerticalLines(false);
jtbl_inGameEasy.setTableHeader(null);
jtbl_inGameEasy.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jtbl_inGameEasyMousePressed(evt);
}
});
А где находится JTableRenderer ?Вот ... это мой пользовательский рендерер ниже ...
public class JLabelTableRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
if (value instanceof JLabel) {
//This time return only the JLabel without icon
return (JLabel) value;
} else {
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
А потом мне нужно положить JLabel внутрь каждой ячейки.Я начинаю добавлять несколько JLabel (s) внутри объекта массива над ячейками JTable , используя этот код;(что не проблема).
DefaultTableModel o_dtb = jtbl_inGameEasy.getModel();
o_dtb.addRow(myArrayCustomizedObjectofJLabel);
Все работает нормально, наверное.Но из-за Моей цели заключается в том, чтобы ---> установить Icon или сделать его невидимым, как только пользователь нажмет на JTable Cells , поэтому я попыталсявыполните мой MouseEvent один раз , нажмите и вызовите эти строки кода;
private void jtbl_inGameEasyMousePressed(java.awt.event.MouseEvent evt) {
// Checking inGameEasy Table Ans
javax.swing.JTable source = (javax.swing.JTable) evt.getSource();
int row = source.rowAtPoint(evt.getPoint());
int column = source.columnAtPoint(evt.getPoint());
DefaultTableModel o_dtb = (DefaultTableModel) jtbl_inGameEasy.getModel();
String s_questAns = "" + Game.getCurrentQuestion().getResult();
String s_userAns = "" + o_dtb.getValueAt(row, column);
// These two lines below are not Working, why yaa??
((JLabel) o_dtb.getValueAt(row, column)).setVisible(false);
((JLabel) o_dtb.getValueAt(row, column)).setIcon(myIcon);
if (s_questAns.equals(s_userAns)) {
Game.correct();
System.err.println("nice ans!");
} else {
jll_txtMiss.setText("Miss : " + Game.wrong());
System.err.println("nope!");
}
nextQuestion();
}
И мне кажется, что Помечено (ниже прокомментировал ) код выше не работает.Да, кастуемую JLabel нельзя было изменить ни ее иконкой (изображением), ни ее видимостью.Является ли это Модель причиной всего этого ?Примечание: данные «Мои ячейки» добавляются позже, после того как модель создается по-другому.