Я пытаюсь реализовать JTable
, который будет форматировать ячейки в столбцах способами, зависящими от их типа. Для этого я реализую метод getTableCellRendererComponent() для TableCellRenderer.JTable TableCellRenderer getTableCellRendererComponent() никогда не вызывал
Проблема в том, что мой метод getTableCellRendererComponent()
никогда не называется, поскольку тестовый вывод в коде никогда не появляется в консоли.
Вот код для визуализатора:
public class MenuSheetTableCellRenderer extends JLabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column){
JLabel label = new JLabel();
System.out.println("test");
if(value instanceof GregorianCalendar){
System.out.println("test2");
GregorianCalendar timeGregorianCalendar = (GregorianCalendar) value;
Date time = timeGregorianCalendar.getTime();
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm a");
String mealTime = timeFormat.format(time);
label.setText(mealTime);
}
else if(value instanceof MealChoice){
label.setText(value.toString());
}
else if(value instanceof Recipe){
label.setText(" " + value.toString());
}
if (value instanceof String || value instanceof MealChoice){
label.setFont(new Font("Tahoma", Font.BOLD, 11));
}
return label;
}
}
Вот код (отредактированный для соответствующего кода), который генерирует таблицу. Обратите внимание, что getRows() - это мой настраиваемый метод, который возвращает данные для визуализации, а также то, что я использую netbeans (следовательно, сокращенный метод initComponents()). Должно быть, не имеет значения.
private void initComponents() {
menuSheetTable = new javax.swing.JTable();
menuSheetTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
menuSheetTable.setEnabled(false);
menuSheetTable.setFocusable(false);
menuSheetTable.setShowHorizontalLines(false);
menuSheetTable.setShowVerticalLines(false);
jScrollPane1.setViewportView(menuSheetTable);
}
public void renderTable(){
String[] columns = { "Sunday", "Monday","Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
Object[][] rows = getRows();
DefaultTableModel menuSheetModel = new DefaultTableModel(rows, columns);
menuSheetTable.setModel(menuSheetModel);
MenuSheetTableCellRenderer renderer = new MenuSheetTableCellRenderer();
try{
menuSheetTable.setDefaultRenderer(Class.forName("java.lang.String"), renderer);
menuSheetTable.setDefaultRenderer(Class.forName("java.util.GregorianCalendar"), renderer);
menuSheetTable.setDefaultRenderer(Class.forName("MenuSystemManager.MealChoice"), renderer);
menuSheetTable.setDefaultRenderer(Class.forName("MenuSystemManager.Recipe"), renderer);
}
catch(ClassNotFoundException e){
System.exit(1);
}
}