【发布时间】:2011-04-02 17:10:36
【问题描述】:
如何设置JTable 列和行颜色?
【问题讨论】:
-
已编辑;如果不正确,请恢复。
-
@llchand:你已经得到了对这个问题和以前问题的有用答案,可能需要一些关注。
如何设置JTable 列和行颜色?
【问题讨论】:
这是一个简短的example。
import java.awt.Color;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
public class JTableExample extends JFrame {
String[][] data = {{"John", "Sutherland", "Student"},
{"George", "Davies", "Student"},
{"Melissa", "Anderson", "Associate"},
{"Stergios", "Maglaras", "Developer"},
};
String[] fields = {"Name", "Surname", "Status"};
public static void main(String[] args) {
new JTableExample();
}
public JTableExample() {
super();
setSize(150, 150);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
dispose();
System.exit(0);
}
});
init();
pack();
setVisible(true);
}
private void init() {
final CustomCellRenderer renderer = new CustomCellRenderer();
JTable jt = new JTable(data, fields) {
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
return renderer;
}
};
JScrollPane pane = new JScrollPane(jt);
getContentPane().add(pane);
}
/**
* @author suhas, orwellophile
*
*/
private class CustomCellRenderer extends DefaultTableCellRenderer {
/**
* @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(JTable, Object, boolean, boolean, int, int)
*/
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component rendererComp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
// Very important to handle selected items (render them inversely colored)
if (isSelected) {
rendererComp.setBackground(getHuedColor(row).darker().darker());
rendererComp.setForeground(getHuedColor(row).brighter().brighter());
}
else {
rendererComp.setBackground(getHuedColor(row).brighter().brighter());
rendererComp.setForeground(getHuedColor(row).darker().darker());
}
return rendererComp;
}
public Color getHuedColor(int hue) {
return new Color(
Color.HSBtoRGB(85 / 360f * hue, 0.7f, 1.0f
));
}
}
}
【讨论】:
从心不在焉的提问者那里回答一个模糊的问题需要一些善意(和空闲时间)。
对于列,您可以在列上设置一个扩展DefaultTableCellRenderer(扩展JLabel)的单元格渲染器,然后设置渲染器的前景和背景。
对于行,您必须在单元格渲染器的getTableCellRendererComponent 中执行此操作。
如果您需要任何不重要的东西(例如交替行背景),您应该使用灵活的自定义渲染器。有无数免费和商业的表格组件提供着色和 JTable 应有的一切,例如 JIDE Grids(不是免费的,但超级强大)。
【讨论】:
DefaultTableCellRenderer rendar1 = new DefaultTableCellRenderer();
rendar1.setForeground(Color.red);
jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar1);
colum 将此代码更改为构造函数的颜色
【讨论】: