Zum Inhalt springen

JTable Zeilenumbrüche


Saban

Empfohlene Beiträge

Hallo Zusammen!

ich habe eine JTable in der ich alle Spalten bis auf die letzten 2 gesperrt habe. Nun möchte ich meine CellRenderer Klasse so umschreiben das alle Zellen die nen String haben der länger ist wie 20 Zeichen umbrechen und die Zeilenhöhe (nur in der Zeile wo es zu trifft) ändert. Zu versuchs zwecken habe ich nun mal meinen CellRenderer folgendermaßen erweitert


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);

		}


// Hier ist der Code für den Zeilenumbruch

		String text = getText();

		String teil1 = "";

		String teil2 = "";


		if(text.length() > 10){

			teil1 = text.substring(0, 5);

			teil2 = text.substring(6, text.length());

		}


		setText("<HTML>" + teil1 + "<BR>" + teil2 + "</HTML>");


		return this;

	}	

}

Mein Problem ist nun das nur noch Zellen angezeigt werden die nen String haben der länger ist wie 10 Zeichen und die Zeilenhöhe wird auch nicht angepasst.

Könnt ihr mir sagen was ich falsch mache :confused:

MfG

Saban

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke schon, dass ich das Problem erkannt habe:

		// Hier ist der Code für den Zeilenumbruch

		String text = getText();

		String teil1 = "";

		String teil2 = "";


		if(text.length() > 10){

			teil1 = text.substring(0, 5);

			teil2 = text.substring(6, text.length());

			[COLOR="#ff0000"]setText("<HTML>" + teil1 + "<BR>" + teil2 + "</HTML>");[/COLOR]

		}


		[COLOR="Red"]//setText("<HTML>" + teil1 + "<BR>" + teil2 + "</HTML>");[/COLOR]



		return this;

	}

Wenn Du außerhalb der IF-Sequenz mittels setText( teil1 ... teil2 ) den Text immer setzt, dann ist teil1 und teil2 genau immer dann leer, wenn Du halt vorher nicht in die IF-Sequenz reingehst!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast du mir vllt auch gleich einen wie ich die Zeilenhöhe der zutreffenden Zeilen ändern kann?

JTable.setRowHeight(int,int) (Java 2 Platform SE v1.4.2)

Jetzt musst Du nur noch dafür sorgen, dass Du innerhalb Deines TableCellRenderers eine Referenz auf die JTable herbekommst, so dass Du die Methode ausführen kannst.

Eventuell musst Du danach noch ein JTable.update() oder so machen.

Bearbeitet von VaNaTiC
URL-Tag wurde falsch eingetragen
Link zu diesem Kommentar
Auf anderen Seiten teilen

wie bekomme ich bitte so ne Referenz auf die JTable

Hmm, schäm Dich! Mir scheint Du kennst Deinen Quellcode nicht besonders :D

Guckst Du hier:

public Component getTableCellRendererComponent(JTable tabelle, Object value, boolean isSelected, boolean hasFocus, int row, int column)

Link zu diesem Kommentar
Auf anderen Seiten teilen

*SCHÄM*

ja sags halt gleich :D

Danke dir echt! du hast mir schon so oft geholfen! bist einfach Spitze ;)

Eine Frage hätt ich aber noch und zwar will ich ja nur die Zeilenhöhe der Zeilen vergrößern bei denen auch die Zeile umgebrochen wird.

Wenn ich aber sage


		if(text.length() > 10){

			teil1 = text.substring(0, 5);

			teil2 = text.substring(6, text.length());

			setText("<HTML>" + teil1 + "<BR>" + teil2 + "</HTML>");

			tabelle.setRowHeight(20);

		}

dann macht der des bei allen. Was ja auch klar ist weil ich ja die Tabelle hernehme und nicht die Zeile... Kann man das auch auf eine bestimmte Zeile beziehen?

MfG

Saban

Link zu diesem Kommentar
Auf anderen Seiten teilen

tabelle.setRowHeight(20);

dann macht der des bei allen.

Ja, stimmt, denn das sagst Du auch explizit mit JTable.setRowHeight(int).

Was ja auch klar ist weil ich ja die Tabelle hernehme und nicht die Zeile...

Ja, genau Du nutzt einfach die falsche setRowHeight(...)

Kann man das auch auf eine bestimmte Zeile beziehen?

Natürlich. Und das hab ich bereits gepostet mit dem Link aus dem JAVA-Doc-API.

JTable.setRowHeight(int pixel) <--- global für alle Zeilen in Tabelle

!=

JTable.setRowHeight(int row, int pixel) <--- nur für die eine Zeile !!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Des wird ja immer peinlicher... :( (lesen sollte man schon können...)

ja gut das Problem bleibt aber irgendwie bestehen

tabelle.setRowHeight(row, 40);

ich hab jetzt einfach mal die Row hergenommen weil ich sonst keine Ahnung habe wie ich mich auf die aktuelle Zeile beziehen kann und des wirkt sich dann wieder auf alle Zeilen auf... (hoffe liegt nicht wieder daran das ichs nicht richtig gelesen habe...)

MfG

Saban

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry! Hier:

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);

		}


		String text = getText();

		String teil1 = "";

		String teil2 = "";


		if(text.length() > 10){

			teil1 = text.substring(0, 5);

			teil2 = text.substring(6, text.length());

			setText("<HTML>" + teil1 + "<BR>" + teil2 + "</HTML>");

			tabelle.setRowHeight(row, 40);

		}




		return this;

	}	

}

MfG

Saban

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm, passt alles. Keine Ahnung, was bei Dir falsch läuft.

Hab mir spasseshalber mal nen BeispielFrame gemacht:

	    final DefaultTableModel data = new DefaultTableModel(100,1);

	    final JTable table = new JTable(data);

	    table.setDefaultRenderer(Object.class, new Cell_Renderer());	    

        JScrollPane scroller = new JScrollPane(table);

        table.setFillsViewportHeight(true);


        JPanel buttons = new JPanel();

        JButton test = new JButton("Test");

        test.addActionListener(new ActionListener()

        {

            public void actionPerformed(ActionEvent ae)

            {

                StringBuffer sb = new StringBuffer();

                for (int i = 0; i < data.getRowCount(); i++)

                {

                    sb.append('0'+i);

                    data.setValueAt(sb.toString(), i,0);

                }

                table.updateUI();

            }

        });

        buttons.setLayout(new FlowLayout());        

        buttons.add(test);


        getContentPane().setLayout(new BorderLayout());

        getContentPane().add(buttons, BorderLayout.NORTH);

        getContentPane().add(scroller, BorderLayout.CENTER);

Und mit Deinem Cell_Renderer funktioniert das prima?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm Komisch :confused:

Muss ich mal schauen ob ich bei der JTable nen Fehler gemacht hab oder irgendwas ausversehen geändert hab aber das find ich schon noch raus :D

Auf alle Fälle möchte ich mich nochmal bei dir bedanken du hast mir extrem geholfen ohne dich würde ich wahrscheinlich wochen für die ganzen Probleme brauchen... VIELEN DANK :)

Ich hoffe ich kann mich irgendwann mal revanchieren falls du mal nicht weiter kommst ;)

MfG

Saban

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...