Stimmt zu wenig erklärt:
Der Fehler kommt zufällig, ich habe noch nichts erkennen können, dass es immer nach etwas genauem Auftritt. Ich klicke halt die jComboboxen oder den Booleanwert an, oder versuche (verschieben funktioniert zwar nicht, aber ich tu einfach so) die JComboboxen zu verschieben.
Und irgendwann plötzlich, kommt der Fehler.
[QUOTE=Camino;27198]
Das mit dem „nicht anklcken können“ hab ich auch noch nicht verstanden. Was bedeutet das, man kan die Tabelle nicht anklicken? Und wie stellst du dir Grösse des letzten Columns wieder her? Verschieben der Header? [/QUOTE]
„nicht anklicken können“ heißt, dass wenn ich auf meine jComboboxen drücke, nichts passiert. (Ich kann auch nicht den Booleanwert anklicken. Normalerweise kommt eine Auswahlliste bei den jComboboxen wo man Werte auswählen kann, es passiert aber nichts, es „springt“ nicht mal die Methode „isCellEditable“ von meiner DefaultTableModel an. Wenn sich die Tabelle verschoben hat, kann man erst die jComboboxen wieder anklicken, also so, dass die Auswahlliste wieder erscheint, wenn man die Größe der Columns wiederherstellt.
Was heißt jetzt Columns wiederherstellen: Ich verschiebe die Header,sodass die JScrollpane einfach wieder voll ist, also normalzustand hergestellt ist.
[QUOTE=Camino;27198]
Vielleicht musst du auch mal den Java-Code zur Tabelle zeigen.[/QUOTE]
Hier der Java-Code für die jTable:
TableModel
implements javax.swing.event.TableModelListener {
private Controller controller;
String[] COL_IDENTIFIER_Statistik =
{"Wertungsklasse","Gesamt","Mini","Kinder","Junioren1","Junioren2",
"AllgK","Einheitlich"};
public StatistikRunde1_TableModel(Controller controller,Object[][] data) {
this.controller = controller;
setDataVector(data, COL_IDENTIFIER_Statistik);
this.addTableModelListener(this);
}
@Override
public Object getValueAt(int row, int column) {
return super.getValueAt(row, column);
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if(columnIndex == 7)
return Boolean.class;
return super.getColumnClass(columnIndex);
}
@Override
public boolean isCellEditable(int row, int column) {
controller.getModel().setRunde_Statistik(1);
int temp = controller.getModel().getWelchejRadioButtonAngeklickt();
/*if(controller.getModel().getWelchejRadioButtonAngeklickt() > 2)
{
return false;
}else
{
if(getValueAt(row, 7).toString().equals("true"))
{
//Darf nur Gesamt und Einheitlich verändern
return column == 1 || column == 7;
}else
{
boolean temp2 = column > 1;
return column > 1;
}
}*/
return true;
}
@Override
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
//String columnName = model.getColumnName(column);
String wertungsname = String.valueOf(model.getValueAt(row, 0));
Object wert = model.getValueAt(row, column);
Object[][] faktoren;
controller.getModel().setRunde_Statistik(1);
faktoren = controller.getModel().getDisziplinFaktorenEineWertungsklasse();
for(int i=0; i<faktoren.length; i++)
{
if(faktoren**[0].toString().equals(wertungsname))
{
if(column == 1)
{
//Gesamt
faktoren**[1] = wert;
faktoren**[2] = wert;
faktoren**[3] = wert;
faktoren**[4] = wert;
faktoren**[5] = wert;
faktoren**[6] = wert;
break;
}else
{
faktoren**[column] = wert;
break;
}
}
}
//hier wird nur ein wert gesetzt
controller.getModel().setDisziplinFaktorenEineWertungsklasse(faktoren);
//Hier wird das TableModel mit den neuen Werten (faktoren[][]) gespeichert
controller.getModel().setDtmStatistikRunde1();
//d.h. new TableModel und dann jTable.setModel(mit neuem TableModel)
//Hier werden noch externe berechnungen, nichts bezüglich jTable gemacht
controller.getControllerHauptform().verwalte_refreshstatistik("");
}
}```
Renderer:
```public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
public MyComboBoxRenderer(String[] items) {
super(items);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
//mal ausprobieren updateUI();
if(table.getValueAt(row, 7) == true)
{
if(column == 1)
{
setForeground(Color.BLACK);
setBackground(Color.WHITE);
}else
{
setForeground(Color.GRAY.brighter());
setBackground(Color.white);
}
}else
{
if(column == 1)
{
setForeground(Color.GRAY.brighter());
setBackground(Color.white);
}else
{
setForeground(Color.BLACK);
setBackground(Color.WHITE);
}
}
setSelectedItem(value);
return this;
}
}```
Setzten der JTable:
``` jTable_StatistikRunde1.setModel(
controller.getModel().getDtmStatistikRunde1());
for(int z=1; z<=6; z++)
{
TableColumn eineColumn = jTable_StatistikRunde1
.getColumnModel().getColumn(z);
JComboBox comboBox = new JComboBox();
String[] faktoren = controller.getModel().getFaktorenFuerJCombobox();
for(String einFaktor : faktoren)
{
comboBox.addItem(einFaktor);
}
eineColumn.setCellEditor(new DefaultCellEditor(comboBox));
eineColumn.setCellRenderer(new MyComboBoxRenderer(faktoren));
} ```
So, was mich daran so fertig macht ist, dass ich nirgends die Größe/Width der Columns ändere, deshalb hab ich keinen Ansatzpunkt, wo der Fehler sein könnte?!?