Hallo Forum,
ich habe jetzt ca. 10 Stunden mit Youtube und Forum lesen verbracht, aber leider keine Ahnung, wie ich in einer Tabelle bei einer einzelnen Zelle nur den Rahmen unten oder rechts setzen kann.
Ich habe einen Turnierplaner programmiert, welcher ein KO-System erzeugt und wollte dies als Baum anzeigenlassen.
Den Spielplan erstellt das Programm richtig. Dabei wird der Turnierbaum (siehe Anhang) Spaltenweise in einer Tabelle geschrieben. (z.B.. Erste Spalte "Runde der letzten 16", 2 Spalte Runde der letzten 8, 3 Spalte Halbfinale, 4 Spalte Finale).
Immer wenn eine Runde gespielt wurde, wird diese ausgewertet und die neuen Begegnungen in die nächste Spalte geschreiben.
Um das Ganze optisch zu verschönern, würde ich jetzt gerne durch setzen der Zellrahmen einen Schönen Turnierbaum erzeugen (Wie dies aussehen soll habe ich mal in Excel dargestellt, siehe Anhang")
Ich würde also gerne nachdem die Spalte der Begegnungen geschrieben wurde eine Methode baumdesign() aufrufen, welche die "Striche"(Rahmen der Zellen) so setzt, dass es eben wie ein Turnierbaum ausschaut. Evtl kann man die Baumstruktur auch schon komplett zeichnen, denn man weis ja die Teilnehmerzahl
Ich kann aber ja die Zellen nicht ansprechen und sagen Celle(x,y).border(bottom).
Und wie das mit dem TableCellRenderer funktioniert, habe ich leider nicht verstanden.
Muss ich dafür eine komplett neue Klasse schreiben und wenn ja, wie übergebe ich diese an die Tabelle? (table.setCellRenderer(renderer))?
was kann ich mit prepareRenderer() anstellen?
Vielen Dank für die Info im Voraus.
hier noch die Methode welche die einzelnen Spalten der KOtable schreibt, nachdem eine andere Methode die Eingabe ausgewertet hat.
CODE:
public void kobaumSpaltenEintragen(int spaltennummer){
int zeilenbeginn = (int)Math.pow(2, (spaltennummer-1)); //In dieser Zeile steht die erste Mannschaft
int leerzeilen= zeilenbeginn*2-1; //Leerzellen zwischen zwei Teams
int spaltenende= kobaumarray.size()+leerzeilen*(kobaumarray.size()-1);
int teamzaehler=0;
int a = zeilenbeginn-1;
while(teamzaehler<kobaumarray.size()){
su.kobaumtable.setValueAt(""+kobaumarray.get(teamzaehler),a,spaltennummer-1);
a=a+leerzeilen+1;
teamzaehler++;
}
baumspaltencounter++;
//Zellenrahmen setzen
}
ich habe jetzt ca. 10 Stunden mit Youtube und Forum lesen verbracht, aber leider keine Ahnung, wie ich in einer Tabelle bei einer einzelnen Zelle nur den Rahmen unten oder rechts setzen kann.
Ich habe einen Turnierplaner programmiert, welcher ein KO-System erzeugt und wollte dies als Baum anzeigenlassen.
Den Spielplan erstellt das Programm richtig. Dabei wird der Turnierbaum (siehe Anhang) Spaltenweise in einer Tabelle geschrieben. (z.B.. Erste Spalte "Runde der letzten 16", 2 Spalte Runde der letzten 8, 3 Spalte Halbfinale, 4 Spalte Finale).
Immer wenn eine Runde gespielt wurde, wird diese ausgewertet und die neuen Begegnungen in die nächste Spalte geschreiben.
Um das Ganze optisch zu verschönern, würde ich jetzt gerne durch setzen der Zellrahmen einen Schönen Turnierbaum erzeugen (Wie dies aussehen soll habe ich mal in Excel dargestellt, siehe Anhang")
Ich würde also gerne nachdem die Spalte der Begegnungen geschrieben wurde eine Methode baumdesign() aufrufen, welche die "Striche"(Rahmen der Zellen) so setzt, dass es eben wie ein Turnierbaum ausschaut. Evtl kann man die Baumstruktur auch schon komplett zeichnen, denn man weis ja die Teilnehmerzahl
Ich kann aber ja die Zellen nicht ansprechen und sagen Celle(x,y).border(bottom).
Und wie das mit dem TableCellRenderer funktioniert, habe ich leider nicht verstanden.
Muss ich dafür eine komplett neue Klasse schreiben und wenn ja, wie übergebe ich diese an die Tabelle? (table.setCellRenderer(renderer))?
was kann ich mit prepareRenderer() anstellen?
Vielen Dank für die Info im Voraus.
hier noch die Methode welche die einzelnen Spalten der KOtable schreibt, nachdem eine andere Methode die Eingabe ausgewertet hat.
CODE:
public void kobaumSpaltenEintragen(int spaltennummer){
int zeilenbeginn = (int)Math.pow(2, (spaltennummer-1)); //In dieser Zeile steht die erste Mannschaft
int leerzeilen= zeilenbeginn*2-1; //Leerzellen zwischen zwei Teams
int spaltenende= kobaumarray.size()+leerzeilen*(kobaumarray.size()-1);
int teamzaehler=0;
int a = zeilenbeginn-1;
while(teamzaehler<kobaumarray.size()){
su.kobaumtable.setValueAt(""+kobaumarray.get(teamzaehler),a,spaltennummer-1);
a=a+leerzeilen+1;
teamzaehler++;
}
baumspaltencounter++;
//Zellenrahmen setzen
}