gpt4 book ai didi

java - JTable TableCellRenderer getTableCellRendererComponent() 从未调用过

转载 作者:行者123 更新时间:2023-11-30 04:17:16 26 4
gpt4 key购买 nike

我正在尝试实现一个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);
}
}

最佳答案

设置默认渲染器的代码没有注册Object对象。由于 rows[][] 被声明为保存类型“Object”,因此渲染器从未被调用,因为它传递的是 Object 对象,而不是 GregorianCalendars、Strings 或 Recipes。

关于java - JTable TableCellRenderer getTableCellRendererComponent() 从未调用过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com