我写了public class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer
并且添加到JTable中的了,table.setDefaultRenderer(Object.class, MainFrame.Renderer);但是,在界面中,table不能选中了,高手来解决,多谢了

解决方案 »

  1.   


    getTableCellRenererComponent方法的参数里面有一个isSelected,就是标识是否选中的,不知道你是否进行了处理。也许是选中了,但是没有像jdk实现的那样有颜色的变化,所以看去就像没有选中一样吧。
    这仅是个人猜测。
    更多信息,请贴出代码。
      

  2.   

    顶1F,
    应该是你renderer方法实现的时候,没有针对处理。        if (isSelected) {
                super.setForeground(fg == null ? table.getSelectionForeground()
                                               : fg);
                super.setBackground(bg == null ? table.getSelectionBackground()
                                               : bg);摘自
    public class DefaultTableCellRenderer extends JLabel
        implements TableCellRenderer, Serializable
      

  3.   


    import javax.swing.*;
    import javax.swing.table.*;import java.awt.*;
    class C extends JFrame {
        public C() {
            JTable tbl = new JTable(new String[][]{{
                    "JTable 里单元格内容的显示器是 TableCellRenderer。",
                    "默认的显示器(DefaultTableCellRenderer)继承 JLabel 所以不方便多行显示。",
                    "要多行显示应该继承 JTextArea(参看下面的 TableCellTextAreaRenderer 类)。",
                    "当然,别忘了调用 JTable.setDefaultRenderer() 登记你的显示器。"}},
                    "A B C D".split(" "));
            tbl.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());
            
            add(new JScrollPane(tbl));
            setSize(800, 200);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }    public static void main(String[] args) { new C(); }
    }class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer {


        public TableCellTextAreaRenderer() {
            setLineWrap(true);
            setWrapStyleWord(true);
        }    public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            // 计算当下行的最佳高度
        
            int maxPreferredHeight = 0;
            for (int i = 0; i < table.getColumnCount(); i++) {
                setText("" + table.getValueAt(row, i));
                setSize(table.getColumnModel().getColumn(column).getWidth(), 0);
                maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height);
            }        if (table.getRowHeight(row) != maxPreferredHeight)  // 少了这行则处理器瞎忙
                table.setRowHeight(row, maxPreferredHeight);        setText(value == null ? "" : value.toString());
            return this;
        }
    }
      

  4.   

    就是上面的代码,怎么样才可以在table中选中行.
      

  5.   

    第一,养成if (..) {...}的习惯
    第二,参考一下我给的类TableCellRenderer的默认实现啊。里面对参数传来的selected等好多不同状态参数,写了好几个if