Java JTable与custome CellRenderer配合使用,在滚动过程中非常缓慢和自由

Java JTable与custome CellRenderer配合使用,在滚动过程中非常缓慢和自由,java,jtable,tablecellrenderer,Java,Jtable,Tablecellrenderer,首先,我搜索了一整天,尝试了很多解决方案,但没有人奏效 我想在我的jtable中使用换行。。所以我做了我自己的手机。。。但是我的JTable在滚动等过程中变慢了 这是我的手机号码: public class LineWrapCellRenderer extends JTextArea implements TableCellRenderer{ public LineWrapCellRenderer(){ this.setWrapStyleWord(true);

首先,我搜索了一整天,尝试了很多解决方案,但没有人奏效

我想在我的jtable中使用换行。。所以我做了我自己的手机。。。但是我的JTable在滚动等过程中变慢了

这是我的手机号码:

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并不是那么简单。你还需要管理单元格的大小。如果你想显示所有文本,那么你需要设置表中每行的高度。或者如果你只想显示两行文本,然后让用户滚动,你不能只使用渲染器,因为渲染器不是真实的组件,所以滚动条无法工作。无论如何,这里有一个旧的解决方案,可能有帮助,也可能没有帮助: