Hi Leute,
Ich schreibe gerade an einem Statistikprogramm für Spiele. In diesem Programm hab ich eine Tabelle, in der die Spiele angezeigt angezeigt werden.
Ich hab vier Felder in der Tabelle in der die Spieler pro Team angezeigt werden. Es können unterschiedliche Parteigrößen vorliegen. also 1 vs 1, 2 vs 1, 1 vs 3, 4 vs 2 vs 3 etc. . Die einzelnen Spieler sind hierbei durch Zeilenumbruch getrennt. Aktuell hab ich den ersten zwei Spielertabellenfeldern den CellRenderer angeschlossen. Jetzt ist nur das Problem, dass bei der Bestimmung der Höhe scheinbar immer die zweite durch Cellrenderer genommen wird und somit bei einem Spiel 2 vs 1 die zweite Person in der Tabelle nicht angezeigt wird.
Wie kann ich pro Reihe bestimmen, in welcher Spalte die meisten Einträge sind und den Wert auf die Zeilenhöhe der Zeile übertragen??
Ich hab hier noch den Code des TableModels und des TableCellRenderers meiner Tabelle
Tabellenausschnitt im Anhang.
Ich schreibe gerade an einem Statistikprogramm für Spiele. In diesem Programm hab ich eine Tabelle, in der die Spiele angezeigt angezeigt werden.
Ich hab vier Felder in der Tabelle in der die Spieler pro Team angezeigt werden. Es können unterschiedliche Parteigrößen vorliegen. also 1 vs 1, 2 vs 1, 1 vs 3, 4 vs 2 vs 3 etc. . Die einzelnen Spieler sind hierbei durch Zeilenumbruch getrennt. Aktuell hab ich den ersten zwei Spielertabellenfeldern den CellRenderer angeschlossen. Jetzt ist nur das Problem, dass bei der Bestimmung der Höhe scheinbar immer die zweite durch Cellrenderer genommen wird und somit bei einem Spiel 2 vs 1 die zweite Person in der Tabelle nicht angezeigt wird.
Wie kann ich pro Reihe bestimmen, in welcher Spalte die meisten Einträge sind und den Wert auf die Zeilenhöhe der Zeile übertragen??
Ich hab hier noch den Code des TableModels und des TableCellRenderers meiner Tabelle
Code:
package de.em.ttstat.logic; import java.util.Calendar; import java.util.Vector; import javax.swing.JTextArea; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; public class TT_Tablemodel implements TableModel { private Vector<Spiel> spiele = new Vector<Spiel>(); private Vector<TableModelListener> listeners = new Vector<TableModelListener>(); public void addSpiel(Spiel spiel){ int index = spiele.size(); spiele.add(spiel); TableModelEvent e = new TableModelEvent(this, index, index, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT); for(int i=0, n = listeners.size(); i<n; i++){ ((TableModelListener)listeners.get(i)).tableChanged(e); } } @Override public void addTableModelListener(TableModelListener l) { listeners.add(l); } @Override public Class<?> getColumnClass(int columnIndex) { switch(columnIndex){ case 0: return String.class; case 1: return Integer.class; case 2: return String.class; case 3: return String.class; case 4: return String.class; case 5: return String.class; case 6: return String.class; case 7: return String.class; case 8: return String.class; case 9: return String.class; case 10: return String.class; case 11: return String.class; default: return null; } } @Override public int getColumnCount() { return 12; } @Override public String getColumnName(int column) { switch(column){ case 0: return "Datum"; case 1: return "Spielsystem"; case 2: return "Edition"; case 3: return "Punkte pro Team"; case 4: return "Mission"; case 5: return "Spielanlass"; case 6: return "Team 1"; case 7: return "Team 2"; case 8: return "Team 3"; case 9: return "Team 4"; case 10: return "Differenz"; case 11: return "Siegbedingung"; default: return null; } } @Override public int getRowCount() { return spiele.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { Spiel spiel = (Spiel)spiele.get(rowIndex); String teamzusammensetzung; Team team; switch(columnIndex){ case 0: String m = ""+(spiel.getDatum().get(Calendar.MONTH)+1); if(m.length()==1) { m = 0+m; } String d = ""+(spiel.getDatum().get(Calendar.DATE)); if(d.length()==1){ d = 0+d; } return d+"."+m+"."+spiel.getDatum().get(Calendar.YEAR); case 1: return spiel.getSpieltyp(); case 2: return spiel.getEdition().getEditionName()+". Edition" ; case 3: return spiel.getPunkte(); case 4: return spiel.getMission(); case 5: return spiel.getSpielumgebung(); case 6: team = (Team)spiel.getTeams().get(0); teamzusammensetzung =""; for(int x=0;x<team.getSpieler().size();x++){ Spielersatz satz = team.getSpieler().get(x); if(spiel.getSpieltyp().equals("wh40k")){ teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getAbschusspunkte()+" AP ["+satz.getPunkte()+" SP])"; } else { teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getPunkte()+")"; } if((x+1)<team.getSpieler().size()){ teamzusammensetzung+= ", \r\n"; } } return teamzusammensetzung; case 7: team = (Team)spiel.getTeams().get(1); teamzusammensetzung =""; for(int x=0;x<team.getSpieler().size();x++){ Spielersatz satz = team.getSpieler().get(x); if(spiel.getSpieltyp().equals("wh40k")){ teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getAbschusspunkte()+" AP ["+satz.getPunkte()+" SP])"; } else { teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getPunkte()+")"; } if((x+1)<team.getSpieler().size()){ teamzusammensetzung+= ", \r\n"; } } return teamzusammensetzung; case 8: try{ team = (Team)spiel.getTeams().get(2); teamzusammensetzung =""; for(int x=0;x<team.getSpieler().size();x++){ Spielersatz satz = team.getSpieler().get(x); if(spiel.getSpieltyp().equals("wh40k")){ teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getAbschusspunkte()+" AP ["+satz.getPunkte()+" SP])"; } else { teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getPunkte()+")"; } if((x+1)<team.getSpieler().size()){ teamzusammensetzung+= ", \r\n"; } } return teamzusammensetzung; }catch (IndexOutOfBoundsException e) { return " "; } case 9: try{ team = (Team)spiel.getTeams().get(3); teamzusammensetzung =""; for(int x=0;x<team.getSpieler().size();x++){ Spielersatz satz = team.getSpieler().get(x); if(spiel.getSpieltyp().equals("wh40k")){ teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getAbschusspunkte()+" AP ["+satz.getPunkte()+" SP])"; } else { teamzusammensetzung+= satz.getSpieler()+" ["+satz.getArmee().getArmeename()+"] ("+satz.getPunkte()+")"; } if((x+1)<team.getSpieler().size()){ teamzusammensetzung+= ", \r\n"; } } return teamzusammensetzung; }catch (IndexOutOfBoundsException e) { return " "; } case 10: int ergebnis =0; int abbruch = 0; try{ spiel.getTeams().get(2); spiel.getTeams().get(3); return "Zu viele Parteien"; }catch(IndexOutOfBoundsException e){ ergebnis=0; abbruch=0; spiel.getTeams().get(0).setSiegpunkte(0); spiel.getTeams().get(1).setSiegpunkte(0); if(spiel.getSpieltyp().equals("wh40k")){ spiel.getTeams().get(0).setTeamabschusspunkte(0); spiel.getTeams().get(1).setTeamabschusspunkte(0); } for(int x=0;x<spiel.getTeams().get(0).getSpieler().size();x++){ if(spiel.getSpieltyp().equals("wh40k")){ spiel.getTeams().get(0).setTeamabschusspunkte(spiel.getTeams().get(0).getSpieler().get(x).getAbschusspunkte()); } spiel.getTeams().get(0).setSiegpunkte(spiel.getTeams().get(0).getSiegpunkte()+spiel.getTeams().get(0).getSpieler().get(x).getPunkte()); } for(int x=0;x<spiel.getTeams().get(1).getSpieler().size();x++){ if(spiel.getSpieltyp().equals("wh40k")){ spiel.getTeams().get(1).setTeamabschusspunkte(spiel.getTeams().get(1).getSpieler().get(x).getAbschusspunkte()); } spiel.getTeams().get(1).setSiegpunkte(spiel.getTeams().get(1).getSiegpunkte()+spiel.getTeams().get(1).getSpieler().get(x).getPunkte()); } ergebnis = Ergebniserrechnung.ergebniserrechnen(spiel.getTeams().get(0).getSiegpunkte(), spiel.getTeams().get(1).getSiegpunkte()); abbruch = Ergebniserrechnung.ergebniserrechnen(spiel.getTeams().get(0).getTeamabschusspunkte(), spiel.getTeams().get(1).getTeamabschusspunkte()); spiel.setDifferenz(ergebnis); if(spiel.getSpieltyp().equals("wh40k")){ return abbruch+" EPDifferenz ("+ergebnis+" SP Differenz)"; } return ergebnis; } case 11: try{ if(spiel.getErgebnis().equals("")){ spiel.differenzerrechnen(); return spiel.getErgebnis(); } else{ return spiel.getErgebnis(); } }catch(NullPointerException e){ spiel.differenzerrechnen(); return spiel.getErgebnis(); } default:return null; } } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public void removeTableModelListener(TableModelListener l) { listeners.remove(l); } @Override public void setValueAt(Object arg0, int arg1, int arg2) { // TODO Auto-generated method stub } public Spiel getSpiel(int index){ return (Spiel) spiele.get(index); } public int maxlengthcellsize(int column){ String inhalt =""; int laenge = 0; for(int x=1; x<this.getRowCount();x++){ inhalt = this.getValueAt(x, column).toString(); if(inhalt.length()>laenge){ laenge = inhalt.length(); } } return laenge; } }
Code:
class MytableCellRenderer extends JTextArea implements javax.swing.table.TableCellRenderer{ @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean selected, boolean hasFokus, int rowIndex, int columnIndex) { // TODO Auto-generated method stub setOpaque(true); try{ String x = value.toString(); setText(x); }catch(NullPointerException e){ setText(""); } if(selected==true){ setBackground(table.getSelectionBackground()); } else{ setBackground(table.getBackground()); } table.setRowHeight(rowIndex, 16*getLineCount()); return this; } }
Comment