Java JTable与custome CellRenderer配合使用,在滚动过程中非常缓慢和自由
首先,我搜索了一整天,尝试了很多解决方案,但没有人奏效 我想在我的jtable中使用换行。。所以我做了我自己的手机。。。但是我的JTable在滚动等过程中变慢了 这是我的手机号码:Java JTable与custome CellRenderer配合使用,在滚动过程中非常缓慢和自由,java,jtable,tablecellrenderer,Java,Jtable,Tablecellrenderer,首先,我搜索了一整天,尝试了很多解决方案,但没有人奏效 我想在我的jtable中使用换行。。所以我做了我自己的手机。。。但是我的JTable在滚动等过程中变慢了 这是我的手机号码: public class LineWrapCellRenderer extends JTextArea implements TableCellRenderer{ public LineWrapCellRenderer(){ this.setWrapStyleWord(true);
public class LineWrapCellRenderer extends JTextArea implements TableCellRenderer{
public LineWrapCellRenderer(){
this.setWrapStyleWord(true);
this.setLineWrap(true);
this.setOpaque(true);
}
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
if (value != null) {
setText(value.toString());
} else {
setText("");
}
return this;
}
}
我已将渲染器设置为
setDefaultRenderer(String.class, CellRenderer);
我的tablemodel如下所示:
return new DefaultTableModel(data, columnNames){
Object tempRetVal = new Object();
Object RetVal = new Object();
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
tempRetVal = Object.class;
RetVal = Object.class;
if(getRowCount() > 0){
for(int i = 0; i<getRowCount();i++){
tempRetVal = getValueAt(i, columnIndex);
if(tempRetVal!=null){
RetVal = tempRetVal;
}
}
}
return RetVal.getClass();
}
};
返回新的DefaultTableModel(数据、列名){
Object tempRetVal=新对象();
Object RetVal=新对象();
@凌驾
公共布尔值isCellEditable(int-rowIndex、int-columnIndex){
返回false;
}
@凌驾
公共类getColumnClass(int columnIndex){
tempRetVal=Object.class;
RetVal=Object.class;
如果(getRowCount()>0){
对于(int i=0;iy滞后于getColumnClass()
method,为什么您总是需要循环行?感谢您的回复。我想获取列的数据类型。但有时第一个单元格是空的。所以我循环一列的所有行以获取数据类型。是否在一列中存储不同的类型?如果在创建模型时数据具有相同的类型集列类。不,我不需要在一列中存储不同的类型。但是tablemodel是使用Resultset动态创建的。问题是,如果我只检查列的第一行,它可能是空的,因此将返回Object.class,并且不会使用我的渲染器,尽管该列来自类型string,该列的其他行包含Strings创建文本区域渲染器rer并不是那么简单。你还需要管理单元格的大小。如果你想显示所有文本,那么你需要设置表中每行的高度。或者如果你只想显示两行文本,然后让用户滚动,你不能只使用渲染器,因为渲染器不是真实的组件,所以滚动条无法工作。无论如何,这里有一个旧的解决方案,可能有帮助,也可能没有帮助: