Announcement

Collapse
No announcement yet.

Größte Zeilenhöhe von mehereren Spalten pro Reihe bestimmen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Größte Zeilenhöhe von mehereren Spalten pro Reihe bestimmen.

    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

    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;
    	}
    }
    Tabellenausschnitt im Anhang.
    Attached Files

  • #2
    Ich habe wohl die Frage nicht verstanden und auf dem Bild ist nichts zu erkennen.

    Wie kann ich pro Reihe bestimmen, in welcher Spalte die meisten Einträge sind und den Wert auf die Zeilenhöhe der Zeile übertragen??
    In dem du die Reihe abläufst und deine gesetzen Einträge ggf. wieder ausliest.

    Die benötigte Größe kann mit http://docs.oracle.com/javase/1.4.2/...ntMetrics.html bestimmt werden. In der JTable kann die Höhe gesetzt werden
    Christian

    Comment

    Working...
    X