我有一个问题,真的不知道如何解决它。
我使用了这个论坛的一些解决方案,但它们不起作用。
这是一段代码:
package own_components.custom_components;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import own_components.localizable_components.LocalizableComponent;
import localization.GUILocalizationTags;
import localization.LocalizationManager;
public class OutputJTable extends JTable implements CustomComponent
{
    private CustomTableModel dataModel = new CustomTableModel();
    private List<String[]> data = new ArrayList<String[]>();
    private final int COLUMNS_AMOUNT = 3;
    private final int _1ST_COL_WIDTH = 25;
    private final int _2ST_COL_WIDTH = 45;
    private final int _3ND_COL_WIDTH = 505;
    public OutputJTable()
    {
        setModel(dataModel);
        setTableProperties();
        dataModel.addTableModelListener(new TableModelListener(){
            @Override
            public void tableChanged(TableModelEvent paramTableModelEvent)
            {
                fitRowsHeight();
            }
        });
    }
    private void setTableProperties()
    {
        //some properties of table
    }
    public void setResultOutput(List<String[]> result)
    {
        data = new ArrayList<String[]>();
        data.add(new String[] { "l", "code", "222222222222222222222222222 22ddddddddddddddddddddddddddd22222222222222222222222222222222" });
        data.add(new String[] { "l", "code", "sssssssssssssssssssssssssssssss sssssssssssssssssssssssssssssssssssssssssssssssssss222222222" });
        dataModel.fireTableDataChanged();
    }
    private void fitRowsHeight()
    {
        for (int row = 0; row < getRowCount(); row++)
        {
            int rowHeight = getRowHeight();
            Component comp = prepareRenderer(getCellRenderer(row, 2), row, 2);
            rowHeight = Math.max(rowHeight, comp.getSize().height);
            setRowHeight(row, rowHeight);
        }
    }
    public int getSelectedRow()
    {
        return selectedRow;
    }
    private class CustomTableModel extends AbstractTableModel implements LocalizableComponent
    {
        private static final long serialVersionUID = -992340559233338699L;
        private String[] columnsNames = { "a", "b", "c" };
        @Override
        public String getColumnName(int paramInt)
        {
            return columnsNames[paramInt];
        }
        @Override
        public boolean isCellEditable(int paramInt1, int paramInt2)
        {
            return false;
        }
        @Override
        public int getColumnCount()
        {
            return COLUMNS_AMOUNT;
        }
        @Override
        public int getRowCount()
        {
            return data.size();
        }
        @Override
        public String getValueAt(int arg0, int arg1)
        {
            return data.get(arg0)[arg1];
        }
        @Override
        public void useTranslatedText(String tag)
        {
            columnsNames[1] = tag;
            getColumnModel().getColumn(2).setHeaderValue(tag);
            repaint();
        }
        @Override
        public void registerToLocalization(LocalizationManager lm, String key)
        {
            lm.registerToTranslationList(this, GUILocalizationTags.OUT_TAB_DESCRIPTION);
        }
    }
    private class CustomTableRenderer extends DefaultTableCellRenderer
    {
        JTextArea cellTemp = new JTextArea();
            @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
            cellTemp = new JTextArea(data.get(row)[column]);
            cellTemp.setLineWrap(true);
            return cellTemp;
        }
    }
}
这有点长但相当简单:我的表使用包含 JTextArea 的自定义单元格渲染器。我使用 JTA 因为我需要字符串包装。在放置这样的 JTextAreas 之后,我希望将行高连续设置为最高的 JTA。
这就是问题所在。在上面的代码中,我希望收到 JTA.height 但我仍然收到“0”。JTA.getRows() 的情况相同。
我真的不明白为什么。谁能解释一下这段代码有什么问题?