Hallöchen,
Kurz und knapp dieses mal, ich habe eine ganz einfache Tabelle die auch [c]jTable.setAutoCreateRowSorter(true);[/c] aktiviert hat.
Das Problem nach einem Neustart der Tabelle sind die Daten wieder komplett unsortiert.
Ich denke das Problem liegt an dieser SortierMethode das sie nur oberflälich sortiert und nicht die ReihenNummern anpasst(Ich lese die Tabelle anhand der Nummern aus)
Könnte mir jemand eine schnelle Lösung dafür anbieten ( Ich weiß sowas gibt es nicht) Bzw hat jemand eine Idee wie man ansonsten die Table richtig sortiert.
Dazu wäre es auch genial wenn ich es irgendwie schaffe , dass wenn man eine neue Reihe hinzufügt und die Tabelle sortiert ist, die Reihe trozdem immer an die letze Stelle geschrieben wird.
Mein Table falls es wen intressiert:
Kurz und knapp dieses mal, ich habe eine ganz einfache Tabelle die auch [c]jTable.setAutoCreateRowSorter(true);[/c] aktiviert hat.
Das Problem nach einem Neustart der Tabelle sind die Daten wieder komplett unsortiert.
Ich denke das Problem liegt an dieser SortierMethode das sie nur oberflälich sortiert und nicht die ReihenNummern anpasst(Ich lese die Tabelle anhand der Nummern aus)
Könnte mir jemand eine schnelle Lösung dafür anbieten ( Ich weiß sowas gibt es nicht) Bzw hat jemand eine Idee wie man ansonsten die Table richtig sortiert.
Dazu wäre es auch genial wenn ich es irgendwie schaffe , dass wenn man eine neue Reihe hinzufügt und die Tabelle sortiert ist, die Reihe trozdem immer an die letze Stelle geschrieben wird.
Mein Table falls es wen intressiert:
Java:
class GroupingTable extends JTable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int keyColumn;
private Color[] colorModel;
private int[] colorIndex; //"Model" zur Speichern der Zeilenfarbe
public GroupingTable(TableModel model, int column) {
super(model);
this.keyColumn = column;
colorModel = new Color[] {this.getBackground(), Color.LIGHT_GRAY};
determineColor();
}
//tableChanged überschrieben, damit das "Farbenmodel" aktualisiert wird
public void tableChanged(TableModelEvent evt) {
if (evt.getColumn()==keyColumn)
determineColor();
super.tableChanged(evt);
}
//Methode zum Ermitteln der Zeilenfarbe
private void determineColor() {
colorIndex = new int[this.getRowCount()];
if (colorIndex.length<=0)
return;
int colorCount=0;
colorIndex[0] = colorCount;
for (int row=1; row<this.getRowCount(); row++) {
if(this.getValueAt(row, this.convertColumnIndexToView(keyColumn)) != null && this.getValueAt(row, this.convertColumnIndexToView(keyColumn))
.equals(this.getValueAt(row-1, this.convertColumnIndexToView(keyColumn))))
colorIndex[row] = colorCount & 1;
else
colorIndex[row] = ++colorCount & 1;
}
}
//überschrieben, um die Zeilenfarbe zu setzen.
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = (Component) super.prepareRenderer(renderer, row, column);
for (int i=0; i<this.getSelectedRows().length; i++) {
if (this.getSelectedRows()[i]==row)
return c;
}
try{
c.setBackground(colorModel[colorIndex[row]]);
}catch(ArrayIndexOutOfBoundsException ex){
}
return c;
}
}
Java:
private void tableSetData() {
String[] columnNames = new String[week.length];
columnNames[0] = "Name";
columnNames[1] = "Projekt";
for(int i = 2; i < columnNames.length; i++){
columnNames[i] = week[i-2];
}
//int nTablelength = table.length;
String[][] data = new String[0][columnNames.length];
c_initData = InitData.fl;
setDtm(new DefaultTableModel(data, columnNames){
/**Eigenes DefaultTableModel um nur Zahlen auf der Tabelle
* nach Zeile 2 zu zulassen.
*/
private static final long serialVersionUID = 1L;
@Override
public void setValueAt(Object aValue, int row, int col)
{
// Abbruch wenn der Wert kein Integer ist.
if (aValue instanceof Integer)
{
//Abbruch wenn der Wert nicht zwischen 0 - 100 liegt.
int value = ((Integer)aValue).intValue();
if(value < 0 || value > 100){
return;
}
}
// Setze den Wert.
super.setValueAt(aValue, row, col);
}
@Override
public Class<?> getColumnClass(int col)
{
if (col >=2)
return Integer.class;
else{
return String.class;
}
}
});
Vector<Vector<String>> filler = c_initData.get2DTable();
Vector<String> formatedVector = new Vector<String>();
for(int i = 1; i < filler.size(); i++){
formatedVector = filler.get(i);
int z = filler.get(i).size()-1;
int gewollteKalenderwoche = c_initData.getWeekNow() + c_initData.getAnzahlWeeks();
// System.out.println(gewollteKalenderwoche);
while(z >= gewollteKalenderwoche-1){
formatedVector.remove(z);
z--;
}
int k = c_initData.getWeekNow();
// System.out.println(k);
while(k >= 2){
try{
formatedVector.remove(k);
}catch(ArrayIndexOutOfBoundsException ex){
}
k--;
}
// System.out.println("Something: "+formatedVector);
dtm.addRow(formatedVector);
}
jTable = new GroupingTable(dtm, 0);
jTable.setLayout(null);
//c_TableM.save();
jTable.setRowHeight(jTable.getRowHeight());
jTable.setAutoCreateRowSorter(true);
jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//ComboBoxen werden auf das JTable gelegt.
TableColumn tColumnNames = jTable.getColumnModel().getColumn(0);
comboBox_names = new JComboBox();
TableColumn tColumnProjekts = jTable.getColumnModel().getColumn(1);
comboBox_projekts = new JComboBox();
jTable.addMouseListener(this);
//ComboxBox f�r Namen und Projekte werden mit den Namen und Projekten gef�llt.
comboBox_names.addItem("");
comboBox_projekts.addItem("");
for(int i = 0; i < namen.length; i++){
comboBox_names.addItem(namen[i]);
}
for(int i = 0; i < projekt.length; i++){
comboBox_projekts.addItem(projekt[i]);
}
//CellEditor f�r die ComboBoxen.
tColumnNames.setCellEditor(new DefaultCellEditor(comboBox_names));
tColumnProjekts.setCellEditor(new DefaultCellEditor(comboBox_projekts));
getDtm().addTableModelListener(this);
jTable.setFillsViewportHeight(true);
jTable.getTableHeader().setOpaque(true);
jTable.getTableHeader().setResizingAllowed(true);
for (int i = 0; i < jTable.getColumnCount(); i++) {
TableColumn col = jTable.getColumnModel().getColumn(i);
col.setPreferredWidth(70);
}
Dimension size2 = jTable.getPreferredScrollableViewportSize();
jTable.setPreferredScrollableViewportSize
(new Dimension(getSize().width, size2.height));
jTable.getTableHeader().setBounds(0, 0, jTable.getPreferredSize().width, 0);
jTable.getTableHeader().setReorderingAllowed(false);
jScrollPane.setViewportView(jTable);
}
Zuletzt bearbeitet: