JTable optimale Spaltenbreite

Saban

Erfahrenes Mitglied
Hallo Zusammen!

ich möchte das meine JTable die optimale Spaltenbreite für jede Spalte ermittelt und diese dem entsprechend anzeigt.
Ich habe auch schon das hier gefunden tutorials

Ich verstehe es aber nicht wirklich... Ich hab keine Ahnung wo genau der Code hin kommen soll und wie genau ich diese Methode Aufrufen kann :confused:

Kann mir da vllt jemand helfen?

MfG
Saban
 
Vllt sollte ich dazu sagen das ich keine eigene Klasse abgeleitet hab vom JTable sondern alles in meiner Klasse Frame hab auf der auch das JTable liegt.
(Falls das wichtig ist!)

MfG
Saban
 
Ähm da mir keiner bis jetzt geantwortet hat stell ich meine Frage einfach mal um...
ist es möglich die Ausgabe in einer Zeile auf zwei umzubrechen? z. B.
Java:
Das ist der erste Teil meiner 1. Zeile \n
und das ist der zweite Teil meiner 1. Zeile
kann mir da jemand helfen?

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Auch auf die Gefahr hin das keiner sich dieses Thema anschaut und ich allein mit mir schreibe post ich wieder mal was...

Also ich hab was gefunden und zwar auf java insel.
Da heißt es ich muss den TableCellRenderer überschreiben. Ich habe schon einen und zwar
Java:
package GUI_Tool;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;

public class Cell_Renderer extends JLabel implements TableCellRenderer{

	private Color 	LIGHTGREY 		= new Color(220, 220, 220);
	private Color 	GREY	 		= new Color(181, 181, 181);
	private Font 	ZELLEN_FONT		= new Font("Arial", Font.BOLD, 12);
	private Border 	ZELLEN_BORDER	= BorderFactory.createEmptyBorder(1, 1, 1, 1);
	
	public Cell_Renderer(){
		setOpaque(true);
		setBorder(ZELLEN_BORDER);
	}
	
	public Component getTableCellRendererComponent(JTable tabelle, Object value, boolean isSelected, boolean hasFocus, int row, int column){
		if(value != null){
			setText(value.toString());
		} else {
			setText("");
		}
		
		setFont(tabelle.getFont());
		setForeground(tabelle.getForeground());
		setBackground(tabelle.getBackground());
		
		if(isSelected){
			setFont(ZELLEN_FONT);
		}
		
		//Angezeigte Spalte in Modellspalte umwandeln
		column = tabelle.convertColumnIndexToModel(column);
		
		if(isSelected){
			setBackground(GREY);
		} else if(column == 8 || column == 9){
			setBackground(LIGHTGREY);
		}
				
		return this;
	}	
}
dem hab ich jetzt einfach noch diesen Teil hinzugefügt.
Java:
		String text = getText();
	    if(text.length() > 50){
	    	String zeile1 = text.substring(0, 4);
	    	String zeile2 = text.substring(5, text.length());
	    	setText( zeile1 + "\n" + zeile2 );
	    }

//Edit: die Tabelle reagiert irgendwie garnicht auf den Zeilenumbruch den sie durchführen soll

Die leiten zwar von einer TextArea ab aber das sollte ja wohl kein so großer unterschied sein ob Area oder Label oder? :confused:
Auf alle Fälle klappt das auch nicht :(

Tipps?

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hallo Saban,
ohhh doch das ist ein Unterschied, eine Textarea ist nunmal nicht ein Label ;-)
Textarea gehören zu den Komponenten, die Zeilenumbruch und Wordumbruch, je nach parametriesierung unterstützen (nennt man auch line wrapping und word wrapping)

Wenn Du aber dennoch nut einen Label einsetzten möchtest, würde ich an Deiner Stelle dem Label einen HTML-formatierten Text geben, dann könntest Du z.B. auch Bildichen bequem mit einbinden. Allerdings ist diese Vorgehensweise vielleicht auch etwas komplizierter.

Takidoso
 
Zuletzt bearbeitet:
Hi Takidoso

Danke dir hab ich auch schon erledigt ich tu grad nur mit der Zeilenhöhe rum. Ich will bei den Zeilen wo umgebrochen wird auch die höhe ändern (ist ja auch nötig) hast du mir da vllt nen Tip?

MfG
Saban
 
Ich denke, da musst Du mal in JTextArea und seine verwandschaft reinschauen.
Ist sicher auch eine Frage welchen Font Du da verwendest.
JTextComponent könnte da noch ein Stichwort sein.
Falls Du die Zeilen Höhe in Bezug auf JTable meinst, betrifft es IMHO immer die ganze Zeile und nicht die jeweiligen Zeilenhöhen der Spalte wo Du JTextArea als Renderer einsetzt.
Habe da leider uach keine Aktien zur Zeit drinn, da ich es nicht weiter benötigte.
Poste notfalls Deinen Code und vielleicht kann Ich Dir punktuell weiterhelfen.

Grüße

Takidoso

Nachtrag: nachdem ich es nochmal gelesen hatte, Deine Frage, glaube ich Du meinst: wie passe ich die Zeile des JTables in Abhängigkeit den Inhalts (anzal der Zeilen) des JTextArea-Renderers an, kann das sein?
Ich würde (ohne es zu wissen ob Du da fündig wirst) nach Litenern der TextArea suchen, die einen Zeilenumbruch bemerkt. Oder vielleicht besser in dem Einsatz Deines CellRenderes (der TextArea) immer beim rendern die Anzahl der Zeilen verscuehn zu holen und dann individuell den JTable anpassen.

Viel Glück (Bin wirklich interessier an Deinem Code) :D
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück