public class ColorTableCellRenderer extends DefaultTableCellRenderer { /** Creates a new instance of FEColorTableCellRenderer */ public FEColorTableCellRenderer() { super(); }
@Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column); if (row % 2 == 0) { this.setBackground(Color.white); } else { this.setBackground(new Color(206,231,255)); } if (row == table.getSelectedRow()) { this.setBackground(new Color(244, 244, 128)); } return this; } 我自己程序里用的!但是不知道你可以用不!红字的地方是设置选中行的颜色,我这边是黄色。 你在你的Jtable.setDefaultRenderer(JTable.getColumnClass(0), new ColorTableCellRenderer());我这边这样用的!你试验下
标识正在编辑的单元格的列。
protected int editingRow
标识正在编辑的单元格的行。
protected Color gridColor
网格的颜色。
1. 定义一个类,实现TableCellRenderer接口。你可以从DefaultTableCellRender继承,
class MyTableCellRender extends DefaultTableCellRenderer
getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = new Label();
c.setBackGroundColor( ... );
return c;
}2. table->getColumnModel()->getColumn()->setTableRender(new MyTableCellRender());如果所有的列都要能改变颜色,要遍历所有的列,都设置你自己的render。这时可以只生成一个render对象,大家都用这一个对象,而不用每次new一个新对象
public class TbCellRender extends DefaultTableCellRenderer { public TbCellRender() {
} public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) { Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, col);
if(isSelected)
comp.setBackground(Color.red);
return comp;
}
}
调用方法:jTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
TableColumn column = jTable.getColumnModel().getColumn(col);
column.setCellRenderer(new TbCellRender());
public class MultiLineCellRenderer implements TableCellRenderer
{
JTextArea text=new JTextArea();
JScrollPane p=new JScrollPane(text);
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column)
{
text.setLineWrap(true);
text.setWrapStyleWord(true);
if (hasFocus)
{
p.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(122, 138, 153), 2));
text.setText(value.toString());
}
else
{
}
return p;
}
}p.setBorder只对选中单元格有效,但是text.setText对选中单元格和该单元格以下所有单元格都有效(选中单元格以上单元格保持空白)。并且不管该单元格以下所有单元格实际内容是什么,全部被显示为选中单元格内容。
table.setCellSelectionEnabled(true);package qq;import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;public class Test { private JTable table;
private JFrame frame; /**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
Test window = new Test();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Create the application
*/
public Test() {
initialize();
} /**
* Initialize the contents of the frame
*/
private void initialize() {
frame = new JFrame();
frame.getContentPane().setLayout(new BorderLayout());
frame.setBounds(100, 100, 500, 375);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane();
frame.getContentPane().add(scrollPane, BorderLayout.CENTER); table = new JTable(50,5);
table.setSelectionBackground(Color.red);
table.setCellSelectionEnabled(true);
scrollPane.setViewportView(table);
}}
return getModel().getValueAt( rowIdx, columnIdx );
}
用这个方法获得要选的单元格,然后修改颜色。
public class ColorTableCellRenderer extends DefaultTableCellRenderer { /** Creates a new instance of FEColorTableCellRenderer */
public FEColorTableCellRenderer() {
super();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
if (row % 2 == 0) {
this.setBackground(Color.white);
} else {
this.setBackground(new Color(206,231,255));
}
if (row == table.getSelectedRow())
{
this.setBackground(new Color(244, 244, 128));
}
return this;
}
我自己程序里用的!但是不知道你可以用不!红字的地方是设置选中行的颜色,我这边是黄色。
你在你的Jtable.setDefaultRenderer(JTable.getColumnClass(0), new ColorTableCellRenderer());我这边这样用的!你试验下
{
this.setBackground(new Color(244, 244, 128));
}
这段是设置选中行颜色 你看看是否可以用
而且根据你所说的我改成这样还是不能达到想要的效果.
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
if (row == table.getSelectedRow()&&column==table.getSelectedColumn())
{
this.setBackground(Color.red);
}
return this;
}
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if(isSelected)
table.setValueAt("0",row,column);
return this;
}
这个TableCellRenderer真的好奇怪,这样就可以实现所单击过的单元格呈现0,但就是实现不了所单击过的单元格变色
public TestRenderer() {
super();
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(isSelected) {
setBackground(Color.red);
}
return this;
}
}其实,关键是调用的地方:
JTable tbl = new JTable(sorter);
TestRenderer testRenderer = new TestRenderer();
tbl.setDefaultRenderer(Object.class, testRenderer);
//如果你的cell的type是Integer,就需要下面这句
tbl.setDefaultRenderer(Integer.class, testRenderer);
不要说你用不了是因为sorter编译不过去JTable tbl = new JTable(sorter);