Hi,
ich habe das Problem das, wenn ich den Standard-Renderer rausnehme und meinen eignenen verwende immer bei einer Mausmarkierung ausschließlich die letzte Zelle einer Reihe blau eingefärbt wird und die restlichen Zellen weiss bleiben. Aber hier erst einmal mein Quellcode vom Model
Und vom Renderer
Habe mich bisher an das FAQ-Beispiel und an die offizielle Hilfe von SUN gehalten und sonst klappt auch alles gut, nur der Fall nicht (gut, die Grafik vorne wird erst aktualisiert wenn ich die Boolean Zelle verlasse, aber das ist eine andere Geschichte).
Würde mich freuen wenn mir jemand weiterhelfen könnte
ich habe das Problem das, wenn ich den Standard-Renderer rausnehme und meinen eignenen verwende immer bei einer Mausmarkierung ausschließlich die letzte Zelle einer Reihe blau eingefärbt wird und die restlichen Zellen weiss bleiben. Aber hier erst einmal mein Quellcode vom Model
Java:
public class Aktuell extends AbstractTableModel {
private Vector devices = new Vector();
private Vector tablelistener = new Vector();
public void addDevice(data.Device device) {
int start = devices.size();
devices.add(device);
TableModelEvent e = new TableModelEvent(this, start, start, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
for (int z = 0; z < tablelistener.size(); z++) {
((TableModelListener) tablelistener.get(z)).tableChanged(e);
}
}
public int getRowCount() {
return devices.size();
}
public int getColumnCount() {
return 6;
}
@Override
public String getColumnName(int columnIndex) {
if (columnIndex == 0) {
return "Status";
}
if (columnIndex == 1) {
return "Name";
}
if (columnIndex == 2) {
return "Typ";
}
if (columnIndex == 3) {
return "Mac";
}
if (columnIndex == 4) {
return "IP";
}
if (columnIndex == 5) {
return "Accept";
}
return null;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return data.Device.class;
}
if (columnIndex == 1) {
return String.class;
}
if (columnIndex == 2) {
return String.class;
}
if (columnIndex == 3) {
return String.class;
}
if (columnIndex == 4) {
return String.class;
}
if (columnIndex == 5) {
return Boolean.class;
}
return null;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 5) {
return true;
}
return true;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
data.Device device = (data.Device) this.devices.get(rowIndex);
if (columnIndex == 0) {
return device;
}
if (columnIndex == 1) {
return device.getName();
}
if (columnIndex == 2) {
return device.getTyp();
}
if (columnIndex == 3) {
return device.getMac();
}
if (columnIndex == 4) {
return device.getIp();
}
if (columnIndex == 5) {
return device.getAccept() ? Boolean.TRUE : Boolean.FALSE;
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
data.Device device = (data.Device) this.devices.get(rowIndex);
if (columnIndex == 5) {
device.setAccept(((Boolean) aValue).booleanValue());
}
}
@Override
public void addTableModelListener(TableModelListener l) {
tablelistener.add(l);
}
@Override
public void removeTableModelListener(TableModelListener l) {
tablelistener.remove(l);
}
}
Und vom Renderer
Java:
public class TableRender extends DefaultTableCellRenderer {
private JLabel label = new JLabel();
private JCheckBox box = new JCheckBox();
private Icon red = new ImageIcon(getClass().getResource("/images/away.png"));
private Icon yellow = new ImageIcon(getClass().getResource("/images/idle.png"));
private Icon green = new ImageIcon(getClass().getResource("/images/available.png"));
private Color colorSelected = new Color(200, 255, 200);
private Color colorFocus = new Color(255, 200, 200);
private Color colorNormal = new Color(200, 200, 255);
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
label.setText("");
label.setIcon(null);
label.setHorizontalAlignment(JLabel.LEFT);
if( hasFocus )
label.setBackground( colorFocus );
else if( isSelected )
label.setBackground( colorSelected );
else
label.setBackground( colorNormal );
if (value instanceof Boolean) {
box.setSelected((Boolean) value);
return box;
}
if (value instanceof String) {
label.setText(value.toString());
return label;
}
if (value instanceof data.Device) {
data.Device temp = (data.Device) value;
if (temp.getAccept() && temp.isKnown()) {
label.setIcon(green);
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
if (!temp.getAccept() && !temp.isKnown()) {
label.setIcon(red);
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
if (!temp.getAccept() && temp.isKnown()) {
label.setIcon(yellow);
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
}
return null;
}
}
Habe mich bisher an das FAQ-Beispiel und an die offizielle Hilfe von SUN gehalten und sonst klappt auch alles gut, nur der Fall nicht (gut, die Grafik vorne wird erst aktualisiert wenn ich die Boolean Zelle verlasse, aber das ist eine andere Geschichte).
Würde mich freuen wenn mir jemand weiterhelfen könnte