text in einer zelle anzeigen

javama

Erfahrenes Mitglied
hallo zusammen,
ich habe eine JTable besteht aus 4 spalten , die die Daten einer Datenbank tabelle anzeigen, alles läuft gut aber die 4. spalte sollte in jeder zelle ein text anzeigen, das problem der ganze Text wir in einer Zeile angezeigt, hat jemnand eine Idee wie man den Text mit zeilenumbrüche anzeigen kann.

ich danke euch im voraus
 

javama

Erfahrenes Mitglied
wozu dient dieses programmteil hier
Java:
if (isSelected) {      
     setForeground(table.getSelectionForeground());      
     setBackground(table.getSelectionBackground());    
} else {      
             setForeground(table.getForeground());      
              setBackground(table.getBackground());   
         }


wie kann man das vermeiden dass die wörter am ende der zeile nicht umgebrochen werden, also anders gesgat zeilenumbrüche nur bei leerzeichen
 
Zuletzt bearbeitet:

Fabio Hellmann

Erfahrenes Mitglied
Der Codeteil markiert lediglich die selektierte Zelle, durch Änderung der Hintergrund- und Schriftfarbe.

Durch diese zwei Aufrüfe, wird es eigentlich eingestellt, dass der Zeilenumbruch nur bei Leerzeichen erfolgen soll:
Java:
setLineWrap(true);
setWrapStyleWord(true);

Gruß

Fabio
 

javama

Erfahrenes Mitglied
jetzt funktioniert schon, aber es gibt noch ein problem,
wenn ein Text gross ist, wird er nicht ganz angezeigt.
mein programmCode sieht so aus:

Java:
class TableCellRendererMehrfachZeilen1 extends JTextArea implements TableCellRenderer{

	/**
	 * Konstruktor
	 * 
	 */
	public TableCellRendererMehrfachZeilen1() {
		super.setLineWrap(true);
		super.setWrapStyleWord(true);
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable,
	 *      java.lang.Object, boolean, boolean, int, int)
	 */
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		super.setText(value != null ? value.toString() : "");
		if (isSelected) {
			super.setForeground(table.getSelectionForeground());
			super.setBackground(table.getSelectionBackground());
		} else {
			super.setForeground(table.getForeground());
			super.setBackground(table.getBackground());
		}

		int cellWidth = (int) table.getCellRect(row, column, true).getWidth();

	//wenn der Text lang ist dann soll ich anstatt 1 die 2 oder 3 einsetzen aber ich will dass der 
//gesamte text angezeigt wird
		super.setRows(1+(int) ((new JTextArea(super.getText())
		.getPreferredSize().getWidth() + super.getColumnWidth() * 2) / cellWidth));

		if (table.getRowHeight(row) != (int) getPreferredSize().getHeight()) {
			
			table.setRowHeight(row, (int) getPreferredSize().getHeight());
		}

		return this;
	}
 
Zuletzt bearbeitet:

Fabio Hellmann

Erfahrenes Mitglied
Du kannst dir von dem JTextArea den Font zurückgeben lassen. Über diesen bekommst du die Schriftgröße raus. Dann musst du die Felder nur noch der Schriftgröße anpassen.

Gruß

Fabio
 

javama

Erfahrenes Mitglied
hat jemand eine Idee was ich hier noch ändern muss, so dass mein zelle (Jtextarea) zu jedem Text passt
Java:
int cellWidth = (int) table.getCellRect(row, column, true).getWidth();
		//System.out.println("cellWidth: "+cellWidth);
		super.setRows(7+(int) ((new JTextArea(super.getText())
						.getPreferredSize().getWidth() + super.getColumnWidth() * 2) / cellWidth));

		if (table.getRowHeight(row) != (int) getPreferredSize().getHeight()) {
			
			table.setRowHeight(row, (int) getPreferredSize().getHeight());
		}
danke
 
Zuletzt bearbeitet:

javama

Erfahrenes Mitglied
wie kann ich das machen dass die leere zeilen innerhalb eines texts zu vermeiden
danke im voraus
 
Zuletzt bearbeitet:

genodeftest

Erfahrenes Mitglied
Ich würde so vorgehen: mehrere aufeinander folgende \n und/oder \r löschen. Und zu dem Post davor: Automatischen Zeilenumbruch (line wrap) aktivieren.