Cell Renderer mit Link

Status
Nicht offen für weitere Antworten.

Tom299

Bekanntes Mitglied
hallo,

ich habe ein etwas komplizierteres problem mit nem cell renderer. und zwar hab ich folgenden renderer benutzt, um in einer tabellenspalte einen link anzuzeigen:

Code:
package de.haufe.modules.calendar.gui.components;

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

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class LinkCellRenderer extends DefaultTableCellRenderer {

    public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus,
        int row, int column) {
        JLabel label = (JLabel) super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
        label.setForeground (Color.BLUE);
        label.setText ("<html><u>" + label.getText () + "</u></html>");
        return label;
    }
    
}

es wird eigentlich nichts anderes gemacht als die vordergrundfarbe blau zu zeichnen und mittels html-tags bekommt man auch das unterstreichen hin (leider gibts beim Font selbst ja kein unterstrichen, sondern nur plain, bold und italic).
die spalte wird über einen listener auch anklickbar gemacht, d.h. sobald man mit der maus über den link fährt ändert sich der mauszeiger und man kann durch einen klick auf den link einen dialog öffnen. soweit so gut.

ABER:
ist der string des links größer als die spalte breit ist, dann wird leider nicht mit ... abgeschnitten sondern es erfolgt ein zeilenumbruch und man hat den string zwei-zeilig in der tabelle, was aber nicht sein soll.

ich habe nur die möglichkeit gefunden, den html-code wegzulassen (auskommentieren). dadurch wird der string des labels automatisch abgeschnitten und mit ... ergänzt, je nachdem wie groß oder klein man die spalte zieht. das funktioniert wunderbar, aber was dann fehlt ist das UNTERSTREICHEN des link-textes, was ich nur mit html hinbekomme.

kann mir da jemand evtl. helfen oder sieht eine möglichkeit, wie ich das anstellen könnte, daß auch der text wenn er in html dargestellt wird am ende mit ... abgeschnitten wird, sobald der text nicht mehr reinpaßt?

gäbe es beim JLabel sowas wie getVisibleText könnte ich den text verwenden und ihn mit html umgeben, aber es gibt leider nur getText und da steht auch immer der komplette text drin, auch wenn auf dem bildschirm nur ein teil mit abgeschnittenen ... dargestellt wird.

bitte um tips :)


gruß tom
 

kleiner_held

Top Contributor
Ist nicht unbedingt schoen, aber vielleicht hilft dir das weiter:
Code:
public class Test 
{

	private static class UnderlinedRenderer extends DefaultTableCellRenderer 
	{

		@Override
		public void updateUI() {
			setUI(new MetalLabelUI()
			{
				@Override
				protected void paintEnabledText(JLabel l, Graphics g, String s, int x, int y) 
                                {
					super.paintEnabledText(l, g, s, x, y);
					Graphics2D g2 = (Graphics2D) g;
					Rectangle2D rectangle = g2.getFontMetrics().getStringBounds(s, g2);
					LineMetrics lineMetrics = g.getFont().getLineMetrics(s, g2.getFontRenderContext());
					float underlineY = lineMetrics.getUnderlineOffset();
					g2.setStroke(new BasicStroke(lineMetrics.getUnderlineThickness()));
					g2.draw(new Line2D.Double(
							(double) (x  + rectangle.getX()),
							(double) (y + rectangle.getY() + rectangle.getHeight() + underlineY),
							(double) (x  + rectangle.getX()) + rectangle.getWidth(),
							(double) (y + rectangle.getY()  + rectangle.getHeight() + underlineY)));
				}
				
				float cachedOffset;
				FontMetrics cachedFontMetrics = null;
				
				@Override
				protected String layoutCL(JLabel label, FontMetrics fontMetrics, String text, Icon icon,
						Rectangle viewR, Rectangle iconR, Rectangle textR)
                                {
					if (cachedFontMetrics == null || !cachedFontMetrics.equals(fontMetrics))
					{
						cachedFontMetrics = fontMetrics;
						LineMetrics lineMetrics = fontMetrics.getLineMetrics(text, label.getGraphics());
						cachedOffset = lineMetrics.getUnderlineOffset() + lineMetrics.getUnderlineThickness();
					}
					viewR.height -= cachedOffset;
					String result = super.layoutCL(label, fontMetrics, text, icon, viewR, iconR, textR);
					viewR.height += cachedOffset;
					textR.height += cachedOffset;
					return result;
				}
			});
			setBackground(null);
		}
	}

	public static void main(String[] args) 
	{
		JFrame frame = new JFrame();
		JTable table = new JTable(new Object[][] {{"TextTextText", "TextTextText", "TextTextText"}, {"TextTextText", "TextTextText", "TextTextText"}, {"TextTextText", "TextTextText", "TextTextText"}}, new Object[] {"A", "B", "C"});
		UnderlinedRenderer renderer = new UnderlinedRenderer();
		renderer.setForeground(Color.BLUE);
		table.setRowHeight(22);
		table.setDefaultRenderer(Object.class, renderer);
		frame.add(new JScrollPane(table));
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}	
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
M JTable Cell Renderer- Terminplaner AWT, Swing, JavaFX & SWT 2
H default cell renderer AWT, Swing, JavaFX & SWT 3
B LookAndFeel Cell Renderer für JTable bei Nimbus Look and Feel AWT, Swing, JavaFX & SWT 2
G Cell Renderer AWT, Swing, JavaFX & SWT 5
D Problem bei meinem Cell Renderer AWT, Swing, JavaFX & SWT 2
C Proleme mit eigenem Cell Renderer AWT, Swing, JavaFX & SWT 3
W JavaFX Etwas Tabellenartiges + Cell-Content-Changed-Event (o.ä.) AWT, Swing, JavaFX & SWT 30
J CheckTreeView mit eigenem Cell Value AWT, Swing, JavaFX & SWT 3
E JavaFX Von der Table-Cell zur Row AWT, Swing, JavaFX & SWT 0
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
X JavaFX TableView selektierung der cell wie begrenzen? AWT, Swing, JavaFX & SWT 0
S SWT TableCell mit Composite als Inhalt / Höhe der Cell/Row AWT, Swing, JavaFX & SWT 5
A JTable Cell Eingabe AWT, Swing, JavaFX & SWT 6
T JTable Cell Refresh AWT, Swing, JavaFX & SWT 5
B Row und Cell Änderungen feststellen AWT, Swing, JavaFX & SWT 3
J Swing JTable cell-ausrichtung für zahlen mit alternierenden zeilenfarben AWT, Swing, JavaFX & SWT 2
A Swing JButton in einer Table Cell AWT, Swing, JavaFX & SWT 9
M Swing JTable cell leeren bei Eingabe AWT, Swing, JavaFX & SWT 6
C Swing JTable: edit Cell -> versteckten Wert ändern AWT, Swing, JavaFX & SWT 12
A Focus in JTable Cell AWT, Swing, JavaFX & SWT 3
S Color in Cell AWT, Swing, JavaFX & SWT 2
O JTable Edit cell edit end erzwingen... AWT, Swing, JavaFX & SWT 7
O JCombobox in EINER JTable Cell AWT, Swing, JavaFX & SWT 5
J Cell Farbe in JTable AWT, Swing, JavaFX & SWT 31
H mehrere cell renderers AWT, Swing, JavaFX & SWT 5
M Select cell AWT, Swing, JavaFX & SWT 3
S JTable - farbe einer cell/row ändern, Hilfe please AWT, Swing, JavaFX & SWT 2
clemson Cursor in JTable-Cell setzen AWT, Swing, JavaFX & SWT 6
D JTable - Hintergrundbild in Cell AWT, Swing, JavaFX & SWT 6
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
L JavaFX Renderer für JavaFX AWT, Swing, JavaFX & SWT 2
T Table Renderer AWT, Swing, JavaFX & SWT 2
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
B JTable Renderer / Listener AWT, Swing, JavaFX & SWT 7
C JComboBox Renderer Problem AWT, Swing, JavaFX & SWT 7
N Renderer Editoren und die JCombobox AWT, Swing, JavaFX & SWT 2
P Swing HTML-Renderer AWT, Swing, JavaFX & SWT 15
B MouseListener im Renderer einer JComboBox AWT, Swing, JavaFX & SWT 3
Z Swing JTable: Boolean Renderer AWT, Swing, JavaFX & SWT 3
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
Y PDF-renderer AWT, Swing, JavaFX & SWT 6
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
R [JTree/DefaultTreeCellRenderer] eigenes Renderer-Panel, so breit wie der JTree AWT, Swing, JavaFX & SWT 2
T JTable mit Renderer sortiert die gerenderte Spalte nicht richtig AWT, Swing, JavaFX & SWT 2
R Swing TableRowSorter und Header Renderer AWT, Swing, JavaFX & SWT 2
N JTable, Renderer mit Button AWT, Swing, JavaFX & SWT 3
D JTable - JCheckbox und Renderer AWT, Swing, JavaFX & SWT 2
G JComboBox Renderer problem AWT, Swing, JavaFX & SWT 5
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
N Verständnissfrage: Jtable und DefaultTableCell Renderer AWT, Swing, JavaFX & SWT 2
K jtable jpanel renderer AWT, Swing, JavaFX & SWT 2
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
S JTree - Renderer - Font AWT, Swing, JavaFX & SWT 3
L Renderer mit nativen komponenten in tabelle / tree / list AWT, Swing, JavaFX & SWT 4
M JTree mit eigenem Renderer sieht seltsam aus AWT, Swing, JavaFX & SWT 2
S JComboBox, ein Renderer und das selektierte Objekt AWT, Swing, JavaFX & SWT 4
M Ganz spezieller Renderer für meinen JTree AWT, Swing, JavaFX & SWT 2
M setOpaque() bei eigenem Renderer AWT, Swing, JavaFX & SWT 5
M Symbole beim eigenen Renderer AWT, Swing, JavaFX & SWT 7
M Renderer AWT, Swing, JavaFX & SWT 2
K JTable Renderer AWT, Swing, JavaFX & SWT 11
K JTable Renderer - Probs mit Icon AWT, Swing, JavaFX & SWT 3
V SWT eigener Renderer? + wo gibts die Sourcen für SWT AWT, Swing, JavaFX & SWT 2
T Problem mit JTable - Renderer AWT, Swing, JavaFX & SWT 3
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
S Swing Mit einem Link eine Methode aufrufen AWT, Swing, JavaFX & SWT 2
F ToolTip mit Link zum anklicken AWT, Swing, JavaFX & SWT 2
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
G Applet, Link ermitteln, dem der Benutzer gefolgt ist AWT, Swing, JavaFX & SWT 2
Zettelkasten Swing anklickbaren Link darstellen AWT, Swing, JavaFX & SWT 2
M Java swt link url auslesen AWT, Swing, JavaFX & SWT 5
M Swing Kein update bei simulierten HTML-Link AWT, Swing, JavaFX & SWT 4
A AWT Bilder als Link verwenden? AWT, Swing, JavaFX & SWT 11
MQue Swing Link in JTextArea AWT, Swing, JavaFX & SWT 5
I Hyper-Link ähnliches Verhalten AWT, Swing, JavaFX & SWT 5
T Öffnen von SWT-Dialogboxen durch HTML-Link in HTML-Code AWT, Swing, JavaFX & SWT 4
G JOptionPane mit link zum anklicken AWT, Swing, JavaFX & SWT 4
R URL Link im JLabel AWT, Swing, JavaFX & SWT 2
G HTML-Link mit SWT bzw. JFACE AWT, Swing, JavaFX & SWT 4
M Bilder als Link verwenden? AWT, Swing, JavaFX & SWT 3
K [AWT] anklickbarer Link in Label AWT, Swing, JavaFX & SWT 3
D Mit JOptionPane einen Link darstellen AWT, Swing, JavaFX & SWT 10
G Link in JoptionPane? AWT, Swing, JavaFX & SWT 3
S Link in JEditorPane AWT, Swing, JavaFX & SWT 5
F Link aus JEditorPane ausführen AWT, Swing, JavaFX & SWT 2
P Default Link in Swing, --> öffne Browser -> Browse URL AWT, Swing, JavaFX & SWT 8
C String als Link einfügen AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben