public void chooserColor(int n) {//n为要改变颜色的行
TableColumn column = table.getColumnModel().getColumn(n);
column.setCellRenderer(new RowRenderer(n));
table.updateUI();    }}class RowRenderer extends DefaultTableCellRenderer {
    private int r;    public RowRenderer(int r) {
this.r = r;
    }    public Component getTableCellRendererComponent(JTable t, Object value,
    boolean isSelected, boolean hasFocus, int row, int column) {
System.out.println("--- background color ---" + t.getBackground());
System.out.println("--- r ---" + r);
if (row == r) {
    System.out.println("---- color row ---" + row);
    System.out.println("---- color colunm ---" + column);
    setForeground(Color.LIGHT_GRAY);
        }
return super.getTableCellRendererComponent(t, value, isSelected,
hasFocus, row, column);
    }
}
我这样写 就改变了列的前景色~~~ 我想改变行的~~

解决方案 »

  1.   

    TableColumn column = table.getColumnModel().getColumn(n);
        column.setCellRenderer(new RowRenderer(n));
    TableColumn column = table.getColumnModel().getColumn(n);
        column.setCellRenderer(new RowRenderer(n));你这个地方就是改变了这个列的。
      

  2.   

    那如何改变行呢?SWING不熟悉,搞了很长时间都没出预想的结果!
      

  3.   

    Java 技术交流群!入群先看公约!本群公约:互助、互勉、共同进步!惑则问、知则答、不知则表示关注。帮助新手、细心回答。 
    同意上述公约者·申请加入!  
    QQ群号:25922618(一群已经满)
    请加备用群:17615698
      

  4.   

    如果单纯想改变行的颜色,那么改写TableCellRenderer接口的
    Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, 
        int row, int column)
    方法,在里面添加代码
    if(row == n)//n为要改变的行
    {
      setBackground(color);//color可以是特定的颜色,也可以从table中取得,如果是后者,那么要自己写个table,提供个共有方法,供renderer调用,因为getTableCellRendererComponent方法的参数中有table变量,可以调用自己写的方法。
    }
    不知道能不能看明白
      

  5.   

    import java.awt.Color;
    import java.awt.Component;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableModel;public class TableRowColorTest {    /**
         * @param args
         */
        public static void main(String[] args) {
            JFrame f = new JFrame();
            TableModel dataModel = new AbstractTableModel() {
                public int getColumnCount() {
                    return 10;
                }            public int getRowCount() {
                    return 10;
                }            public Object getValueAt(int row, int col) {
                    return new Integer(row * col);
                }            public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return true;
                }
            };
            f.getContentPane().add(new JScrollPane(new M_Table(dataModel)));
            f.pack();
            f.setVisible(true);
            f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
        }}class M_Renderer extends DefaultTableCellRenderer {
        public Component getTableCellRendererComponent(JTable table,
                                                       Object value,
                                                       boolean isSelected,
                                                       boolean hasFocus,
                                                       int row,
                                                       int column) {
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }
    }class M_Table extends JTable {    public M_Table(TableModel dataModel) {
            super(dataModel);
        }    public Color getSpecifiedRowBackgroundColor(int row) {
            /**
             * your logic
             */
            if (row == 0) {
                return Color.BLUE;
            } else if (row == 1) {
                return Color.RED;
            } else {
                return super.getBackground();
            }
        }    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
            Object value = getValueAt(row, column);        boolean isSelected = false;
            boolean hasFocus = false;        // Only indicate the selection and focused cell if not printing
            if (!isPaintingForPrint()) {
                isSelected = isCellSelected(row, column);            boolean rowIsLead = (selectionModel.getLeadSelectionIndex() == row);
                boolean colIsLead = (columnModel.getSelectionModel().getLeadSelectionIndex() == column);            hasFocus = (rowIsLead && colIsLead) && isFocusOwner();
            }
            ((DefaultTableCellRenderer) renderer).setBackground(this
                .getSpecifiedRowBackgroundColor(row));
            return renderer.getTableCellRendererComponent(
                this,
                value,
                isSelected,
                hasFocus,
                row,
                column);
        }
    }
    还是贴段代码给你吧
      

  6.   

    import java.awt.Color;
    import java.awt.Component;
    import java.util.HashMap;
    import java.util.Map;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableModel;public class TableRowColorTest {    public static final Color SELECTED_COLOR = Color.BLUE;    /**
         * @param args
         */
        public static void main(String[] args) {
            JFrame f = new JFrame();
            TableModel dataModel = new AbstractTableModel() {
                public int getColumnCount() {
                    return 10;
                }            public int getRowCount() {
                    return 10;
                }            public Object getValueAt(int row, int col) {
                    return new Integer(row * col);
                }            public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return true;
                }
            };
            M_Table table = new M_Table(dataModel);
            f.getContentPane().add(new JScrollPane(table));
            table.setSpecifiedRowBackgroundColor(0, SELECTED_COLOR);
            table.setSpecifiedRowBackgroundColor(1, Color.RED);
            f.pack();
            f.setVisible(true);
            f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
        }}class M_Renderer extends DefaultTableCellRenderer {
        public Component getTableCellRendererComponent(JTable table,
                                                       Object value,
                                                       boolean isSelected,
                                                       boolean hasFocus,
                                                       int row,
                                                       int column) {
            Component component2 =
                    super
                        .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table instanceof M_Table) {
                M_Table t = (M_Table) table;
                if (t.getSpecifiedRowBackgroundColor(row) == TableRowColorTest.SELECTED_COLOR) {
                    component2.setBackground(TableRowColorTest.SELECTED_COLOR);
                }
            }
            return component2;
        }
    }class M_Table extends JTable {    private Map<Integer, Color> colorMap = new HashMap<Integer, Color>();    public M_Table(TableModel dataModel) {
            super(dataModel);
        }    public TableCellRenderer getCellRenderer(int row, int col) {
            return new M_Renderer();
        }    public Color getSpecifiedRowBackgroundColor(int row) {
            /**
             * your logic
             */
            if (colorMap.containsKey(row)) {
                return colorMap.get(row);
            } else {
                return this.getBackground();
            }
            // if (row == 0) {
            // return TableRowColorTest.SELECTED_COLOR;
            // } else if (row == 1) {
            // return Color.RED;
            // } else {
            // return super.getBackground();
            // }
        }    public void setSpecifiedRowBackgroundColor(int row, Color color) {
            colorMap.put(row, color);
        }    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
            Object value = getValueAt(row, column);        boolean isSelected = false;
            boolean hasFocus = false;        // Only indicate the selection and focused cell if not printing
            if (!isPaintingForPrint()) {
                isSelected = isCellSelected(row, column);            boolean rowIsLead = (selectionModel.getLeadSelectionIndex() == row);
                boolean colIsLead = (columnModel.getSelectionModel().getLeadSelectionIndex() == column);            hasFocus = (rowIsLead && colIsLead) && isFocusOwner();
            }
            ((DefaultTableCellRenderer) renderer).setBackground(this
                .getSpecifiedRowBackgroundColor(row));
            return renderer.getTableCellRendererComponent(
                this,
                value,
                isSelected,
                hasFocus,
                row,
                column);
        }
    }
    这样?
    什么叫鼠标选择不了?
    不懂
      

  7.   

    import java.awt.Color;
    import java.awt.Component;
    import java.util.HashMap;
    import java.util.Map;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableModel;public class TableRowColorTest {    public static final Color SELECTED_COLOR = Color.BLUE;    /**
         * @param args
         */
        public static void main(String[] args) {
            JFrame f = new JFrame();
            TableModel dataModel = new AbstractTableModel() {
                public int getColumnCount() {
                    return 10;
                }            public int getRowCount() {
                    return 10;
                }            public Object getValueAt(int row, int col) {
                    return new Integer(row * col);
                }            public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return true;
                }
            };
            M_Table table = new M_Table(dataModel);
            f.getContentPane().add(new JScrollPane(table));
            table.setSpecifiedRowBackgroundColor(0, SELECTED_COLOR);
            table.setSpecifiedRowBackgroundColor(1, Color.RED);
            f.pack();
            f.setVisible(true);
            f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
        }}class M_Renderer extends DefaultTableCellRenderer {
        public Component getTableCellRendererComponent(JTable table,
                                                       Object value,
                                                       boolean isSelected,
                                                       boolean hasFocus,
                                                       int row,
                                                       int column) {
            Component component2 =
                    super
                        .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table instanceof M_Table) {
                M_Table t = (M_Table) table;
                if (t.getSpecifiedRowBackgroundColor(row) == TableRowColorTest.SELECTED_COLOR) {
                    component2.setBackground(TableRowColorTest.SELECTED_COLOR);
                }
            }
            return component2;
        }
    }class M_Table extends JTable {    private Map<Integer, Color> colorMap = new HashMap<Integer, Color>();    public M_Table(TableModel dataModel) {
            super(dataModel);
        }    public TableCellRenderer getCellRenderer(int row, int col) {
            return new M_Renderer();
        }    public Color getSpecifiedRowBackgroundColor(int row) {
            /**
             * your logic
             */
            if (colorMap.containsKey(row)) {
                return colorMap.get(row);
            } else {
                return this.getBackground();
            }
            // if (row == 0) {
            // return TableRowColorTest.SELECTED_COLOR;
            // } else if (row == 1) {
            // return Color.RED;
            // } else {
            // return super.getBackground();
            // }
        }    public void setSpecifiedRowBackgroundColor(int row, Color color) {
            colorMap.put(row, color);
        }    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
            Object value = getValueAt(row, column);        boolean isSelected = false;
            boolean hasFocus = false;        // Only indicate the selection and focused cell if not printing
            if (!isPaintingForPrint()) {
                isSelected = isCellSelected(row, column);            boolean rowIsLead = (selectionModel.getLeadSelectionIndex() == row);
                boolean colIsLead = (columnModel.getSelectionModel().getLeadSelectionIndex() == column);            hasFocus = (rowIsLead && colIsLead) && isFocusOwner();
            }
            ((DefaultTableCellRenderer) renderer).setBackground(this
                .getSpecifiedRowBackgroundColor(row));
            return renderer.getTableCellRendererComponent(
                this,
                value,
                isSelected,
                hasFocus,
                row,
                column);
        }
    }
    怎么发不出去阿,这样吗?
    2.鼠标选择不了。//不知道什么意思
      

  8.   

    网速好慢阿,哦,那这样做应该就可以了
    改写renderer里的方法