table.getColumnModel().getColumn(i).setCellRenderer(new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String v = (String) value;
String[] vs = v.split("\n");
JPanel p = new JPanel(new GridLayout(vs.length, 1)) {
@Override
public void setForeground(Color fg) {
for (int i = 0; i < getComponentCount(); i++) {
getComponent(i).setForeground(fg);
}
super.setForeground(fg);
}
@Override
public void setBackground(Color bg) {
for (int i = 0; i < getComponentCount(); i++) {
getComponent(i).setBackground(bg);
}
super.setBackground(bg);
}
};
// 內容
for (String s : vs) {
JLabel l = new JLabel(s, JLabel.LEFT);
l.setOpaque(true);
p.add(l);
}
// 列高
table.setRowHeight(row, table.getRowHeight() * vs.length);
// 顏色設定
p.setOpaque(true);
p.setBackground(Color.white);
// 變更背景及字體 顏色同, 同時變更內部元件的顏色
if (isSelected) {
p.setBackground(UIManager.getColor("Table.selectionBackground"));
p.setForeground(UIManager.getColor("Table.selectionForeground"));
}
if (hasFocus) {
p.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
if (table.isCellEditable(row, column)) {
p.setForeground(UIManager.getColor("Table.focusCellForeground"));
p.setBackground(UIManager.getColor("Table.focusCellBackground"));
}
} else {
p.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
}
return p;
}
});