moin moin,
hab folgendes problem:
hab ne JTable mit eigenen model und cellrenderer. der CellRenderer ist von JTextArea abgeleitet, da ich mehrere Zeilen in den Zellen benötige. Die Zellen sind editierbar. Wenn ich jetzt den Inhalt einer Zelle verändere wird dieser richtig angezeigt, jedoch bei einem System.out.println() wird der Text nicht ausgegeben.
Hab ich vielleicht die setValueAt() nicht richtig überschrieben, oder woran kann das liegen?
hier mal die klassen:
[HIGHLIGHT="Java"]import java.awt.Component;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableCellRenderer;
public class OwnCellRenderer extends JTextArea implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
public OwnCellRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
if (isSelected)
{
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else
{
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setFont(table.getFont());
if (hasFocus)
{
setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
if (table.isCellEditable(row, column)) {
setForeground( UIManager.getColor("Table.focusCellForeground") );
setBackground( UIManager.getColor("Table.focusCellBackground") );
}
} else
{
setBorder(new EmptyBorder(1, 2, 1, 2));
}
setText((value == null) ? "" : value.toString());
return this;
}
}[/HIGHLIGHT]
und hier noch TableModel sie setvalueat() und getvalueat():
[HIGHLIGHT="Java"] public void setValueAt(Object value, int row, int col)
{
switch(col){
case 0 : if(row >= zusatzuntersuchung.size())
zusatzuntersuchung.add((String) value);
// neuer Eintrag, wird am Ende der ArrayList eingefuegt
else
zusatzuntersuchung.set(row,value.toString());
// Ersetz den Eintrag an der Stelle "row"
break;
}
if(!(this.getValueAt(row, col).toString().equalsIgnoreCase("")))
{
addData("");
}
this.fireTableDataChanged();
}
public Object getValueAt(int row, int col)
{
return zusatzuntersuchung.get(row);
}[/HIGHLIGHT]
hoffe ich habs verständlich erläutert.
grüßle
hab folgendes problem:
hab ne JTable mit eigenen model und cellrenderer. der CellRenderer ist von JTextArea abgeleitet, da ich mehrere Zeilen in den Zellen benötige. Die Zellen sind editierbar. Wenn ich jetzt den Inhalt einer Zelle verändere wird dieser richtig angezeigt, jedoch bei einem System.out.println() wird der Text nicht ausgegeben.
Hab ich vielleicht die setValueAt() nicht richtig überschrieben, oder woran kann das liegen?
hier mal die klassen:
[HIGHLIGHT="Java"]import java.awt.Component;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableCellRenderer;
public class OwnCellRenderer extends JTextArea implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
public OwnCellRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
if (isSelected)
{
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else
{
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setFont(table.getFont());
if (hasFocus)
{
setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
if (table.isCellEditable(row, column)) {
setForeground( UIManager.getColor("Table.focusCellForeground") );
setBackground( UIManager.getColor("Table.focusCellBackground") );
}
} else
{
setBorder(new EmptyBorder(1, 2, 1, 2));
}
setText((value == null) ? "" : value.toString());
return this;
}
}[/HIGHLIGHT]
und hier noch TableModel sie setvalueat() und getvalueat():
[HIGHLIGHT="Java"] public void setValueAt(Object value, int row, int col)
{
switch(col){
case 0 : if(row >= zusatzuntersuchung.size())
zusatzuntersuchung.add((String) value);
// neuer Eintrag, wird am Ende der ArrayList eingefuegt
else
zusatzuntersuchung.set(row,value.toString());
// Ersetz den Eintrag an der Stelle "row"
break;
}
if(!(this.getValueAt(row, col).toString().equalsIgnoreCase("")))
{
addData("");
}
this.fireTableDataChanged();
}
public Object getValueAt(int row, int col)
{
return zusatzuntersuchung.get(row);
}[/HIGHLIGHT]
hoffe ich habs verständlich erläutert.
grüßle
Zuletzt bearbeitet von einem Moderator: