Render tabelki:
class EvenOddRenderer implements TableCellRenderer
{
public final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
Color zielony = new Color(137, 193, 123, 72);//red,green
Color zielony2 = new Color(20, 100, 253, 72);//red,green
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
((JLabel) renderer).setOpaque(true);
Color foreground, background;
if (isSelected) {
foreground = Color.black;
background = zielony2;
} else {
if (row % 2 == 0) {
foreground = Color.black;
background = Color.white;
} else {
foreground = Color.black;
background = zielony;
}
}
renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;
}
}
Jak widać koloruje co2gi weirsz w tablei, problem pojawił sie gdy musiałem zawijać wiersze w 2 ostatnich korkach w ten sposób:
public class TextAreaRenderer extends JTextArea
implements TableCellRenderer {
private final DefaultTableCellRenderer adaptee =
new DefaultTableCellRenderer();
/** mapuj z tablicy do mapy wierszy do mapy wysokości kolumn
*/
private final Map cellSizes = new HashMap();
public TextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(//
JTable table, Object obj, boolean isSelected,
boolean hasFocus, int row, int column) {
// ustaw kolory, etc. używając standardowych dla danej platformy
adaptee.getTableCellRendererComponent(table, obj,
isSelected, hasFocus, row, column);
setForeground(adaptee.getForeground());
setBackground(adaptee.getBackground());
setBorder(adaptee.getBorder());
setFont(adaptee.getFont());
setText(adaptee.getText());
// Ta linia była bardzo ważna, żeby działało z JDK1.4
TableColumnModel columnModel = table.getColumnModel();
setSize(columnModel.getColumn(column).getWidth(), 100000);
int height_wanted = (int) getPreferredSize().getHeight();
addSize(table, row, column, height_wanted);
height_wanted = findTotalMaximumRowSize(table, row);
if (height_wanted != table.getRowHeight(row)) {
table.setRowHeight(row, height_wanted);
}
return this;
}
private void addSize(JTable table, int row, int column,
int height) {
Map rows = (Map) cellSizes.get(table);
if (rows == null) {
cellSizes.put(table, rows = new HashMap());
}
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null) {
rows.put(new Integer(row), rowheights = new HashMap());
}
rowheights.put(new Integer(column), new Integer(height));
}
/**
* Przejrzyj wszystkie kolumny i pobierz procedurę rysującą.
* Jeśli dodatkowo jest to TextAreaRenderer, patrzymy też
* na maksymalną wysokość w jego tablicy rozproszonej dla tego wiersza.
*/
private int findTotalMaximumRowSize(JTable table, int row) {
int maximum_height = 0;
Enumeration columns = table.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn tc = (TableColumn) columns.nextElement();
TableCellRenderer cellRenderer = tc.getCellRenderer();
if (cellRenderer instanceof TextAreaRenderer) {
TextAreaRenderer tar = (TextAreaRenderer) cellRenderer;
maximum_height = Math.max(maximum_height,
tar.findMaximumRowSize(table, row));
}
}
return maximum_height;
}
private int findMaximumRowSize(JTable table, int row) {
Map rows = (Map) cellSizes.get(table);
if (rows == null) return 0;
Map rowheights = (Map) rows.get(new Integer(row));
if (rowheights == null) return 0;
int maximum_height = 0;
for (Iterator it = rowheights.entrySet().iterator();
it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
int cellHeight = ((Integer) entry.getValue()).intValue();
maximum_height = Math.max(maximum_height, cellHeight);
}
return maximum_height;
}
}
public class TextAreaEditor extends DefaultCellEditor {
public TextAreaEditor() {
super(new JTextField());
final JTextArea textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBorder(null);
editorComponent = scrollPane;
delegate = new DefaultCellEditor.EditorDelegate() {
public void setValue(Object value) {
textArea.setText((value != null) ? value.toString() : "");
}
public Object getCellEditorValue() {
return textArea.getText();
}
};
}
}
No i wywołanie, tu przykladowo tworze tabelke:
table = new JTable(model);
//------------------------------------------------------------------------------
final TableRowSorter<TableModel> sorter =new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
No i zawijam wiesze w kolumnie 8
//---------------------------render zawijania werszy --------------------------
TableColumnModel cmodel = table.getColumnModel();
TextAreaRenderer textAreaRenderer = new TextAreaRenderer();
cmodel.getColumn(8).setCellRenderer(textAreaRenderer);
TextAreaEditor textEditor = new TextAreaEditor();
cmodel.getColumn(8).setCellEditor(textEditor);
Uruchamiam render kolorujacy co 2gi wiersz czyli wczesniej wklejony EvenOddRenderer
//---------------------------- render kolorow ----------------------------------
Render_rozliczen();
No i wczym problem, wszystko ładnie sie koloruje i zawija tylko komórki a właściwei kkolumny (czyli kolumne 8) mam nie pokolorowana. Nie koloruje kolumn w ktorych uzywam zawijania tekstu. No niby logiczne wszystko, ale nie wiem jak sobie z tym poradzic. Może coś podpowiecie Dzięki