Objekt in TableCellRenderer packen, warum ein Fehler?

Status
Nicht offen für weitere Antworten.

Matflasch

Aktives Mitglied
Hi,

ich habe mit ein Objekt erstellt, welches BO_TableCell heisst, dieses Objekt hat ne menge Eigenschaften, wie
- Value // Der Eigentliche Wert
- ToolTipText // ...
- Background
- Foreground
- Horizontal Align
- Vertical Align
....

Halt, was man einer Zelle so zuweisen kann.

Nun gibt es ja den TableCellRenderer. Ich habe mir praktisch den DefaultTableCellRenderer selbst gemacht:

Da dort als Wert ein Objekt übergeben wird, kann man ja nicht nur einen String, sondern z.B. auch mein BO_TableCell-Objekt übergeben.
Ok,
- Daten aus der Datenbank gelesen;
- Daten der Datenbank jeweils in ein BO_TableCell-Objekt gepackt;
- Die BO_TableCell-Objekte alle in ein Object[][] gepackt und dem TableModel gegeben.

Nun wird dem Renderer das Objekt übergeben und dort wird dann je nach String/Integer etc was gemacht.
Also mit setText() wird dann der Text gesetzt.

Soweit klappt das ganze auch 'eigentlich'.
Denn wenn man auf den ersten Blick die Table sieht, dann sieht die vernünftig aus...
Wenn man aber einen Doppelklick auf eine Zelle macht, dann erscheint praktisch 'im Hintergrund' die Adresse von dem Objekt, also dieses Objekt@s7a9s7d9das7 oder so, hab grad kein Beispiel dafür, aber ihr wisst sicher, was ich meine. Der Wert, der im Renderer-Label ist, ist nicht in der Table.

Mit table.setValueAt(x,y,value) habe ich das ganze auch probiert, aber dann spinnt er total und es geht nix mehr...

Im prinzip will ich das editieren dieser Table auch gar nicht erlauben, was mein weiteres Problem ist.
Wie kann ich editieren der Zellen verbieten?
Ich habe auch schon probiert es von einem JTextField abzuleiten und es mit setEditable(false) abzuschalten -> ohne Erfolg...

Zeilenweise soll das markieren aber erlaubt werden, was auch klappt, aber da nur auf dem Renderer-Label der Wert steht und nicht in dem Table, kann ich beim klick auf eine Zeile nicht den Wert aus der ersten Spalte (Die ID) auslesen. Oder wie kann ich den Renderer zum auslesen mit getText() ansprechen? Habe dazu nix gefunden...



Code:
public class MskTblRenderer extends JLabel implements TableCellRenderer {
...

	public MskTblRenderer () {
		super();
		initialize();
	}

	public String RendererToolTipParser(String s) {
		final StringBuffer sb = new StringBuffer(s.length() * 2);
		final StringCharacterIterator iterator = new StringCharacterIterator(s);
		char character = iterator.current();
		while (character != StringCharacterIterator.DONE) {
			if (character == '\n')
				sb.append("
");
			else
				sb.append(character);
			character = iterator.next();
		}
		return sb.toString();
	}
	public Component getTableCellRendererComponent(
		JTable Table,
		Object Value,
		boolean isSelected,
		boolean hasFocus,
		int Row,
		int Column) {

		BO_TableCell tbc = (BO_TableCell) Value;
		
		
		
		// Grundeinstellungen
		setIcon(null);
		setText(null);
		setToolTipText(null);
		
		// Generelle Eigenschaften
//		if(hasFocus()) {
//			setBackground(Color.blue);
//		} else {
//			setForeground(tbc.getForegroundColor());
//			setBackground(tbc.getBackgroundColor());
//		}
//		if(isSelected) {
//			setBackground(Color.red);
//		} else {
//			setForeground(tbc.getForegroundColor());
//			setBackground(tbc.getBackgroundColor());
//		}

		setForeground(Color.blue);

		setFont(tbc.getFont());
		
		// Icon, ImageIcon
		if((tbc.getIcon() instanceof Icon ||
					tbc.getIcon() instanceof ImageIcon) &&
					tbc.getIcon() != null &&
					tbc.getIcon().toString() != null &&
					tbc.getIcon().toString().length() > 0) {
			setHorizontalAlignment(SwingConstants.CENTER);
			setIcon((Icon)tbc.getIcon());
		}					
		// String
		else if(tbc.getValue() instanceof String){
//			setForeground(tbc.getForegroundColor());
			setHorizontalAlignment(SwingConstants.LEFT);
			setText(tbc.getValue().toString());
			setToolTipText(tbc.getToolTipText());		
		}
		// Integer 
		else if(tbc.getValue() instanceof Integer) {
			setHorizontalAlignment(SwingConstants.CENTER);
			setText(tbc.getValue().toString());
			setToolTipText(tbc.getToolTipText());
		}
		// Alles andere 
		else {
//			String v = tbc.getValue().toString();
//			Value = v;
//			setText(v);
			setToolTipText(tbc.getToolTipText());
		}	
		ToolTipManager.sharedInstance().setDismissDelay(30000);
		setToolTipText("<html>" + RendererToolTipParser(tbc.getToolTipText()) + "</html>");
		
		
		return this; 
	}
}


Mfg, Matflasch
 

Matflasch

Aktives Mitglied
Also ich habe nun einges weiteres geschafft.

Die Editierbarkeit habe ich mir nun mit ner boolean Variable eingestellt, in dem ich mir das DefaultTableModel selbst erstellt habe... bzw davon ableiten und isCellEditable(boolean) überschrieben habe.

Der Renderer funktioniert nun soweit.

Bei einer weiteren Table habe ich nun das Problem, dass dort 6 Spalten sind und die sollen editierbar sein, soweit kein Problem.

Ich habe aber ja mein BO_TableCell Objekt. Dieses Objekt liegt in jeder Zelle drin. Bei dem Renderer mache ich das so...

Code:
	public Component getTableCellRendererComponent(
			JTable Table,
			Object Value,
			boolean isSelected,
			boolean hasFocus,
			int Row,
			int Column) {

	BO_TableCell tbc = (BO_TableCell) Value;
		
	setText(tbc.getValue().toString());
	setToolTipText(tbc.getToolTipText());
		
	return this; 
	}

Funzt super soweit, wenn ich nen Wert aus der Table haben will geht das auch super per...

Code:
BO_TableCell tbc = (BO_TableCell) getTblTrack().getValueAt(row, col);

Mein Problem ist nur noch, dass der TableCellEditor nicht funktioniert.
Aufgerufen und benutzt wird er, da ich die Farben geändert habe und das wurde übernommen.

Abgeleitet ist mein TableCellEditor von JTextField und implementiert das Interface TableCellEditor.
Nun könnte ich doch den Text genauso wie beim Renderer setzen oder?
Leider geht das nur nicht...

Code:
public class Mtf_StdTblEditor extends JTextField implements TableCellEditor {
    ...
	public Component getTableCellEditorComponent(
					JTable tbl, 
					Object value, 
					boolean Selected, 
					int row, 
					int col) {
		BO_TableCell tce = (BO_TableCell) value;
		setText(tce.getValue().toString());
		setBackground(Color.red);
		setToolTipText("Tooltip");
		return this;
	}
...
...

Wie kann ich den TableCellEditor nun benutzen zum bearbeiten der String?

Den, den die Table eigentlich nutzt, kann ich nicht nutzen, da ich ein Objekt in der Zelle liegen habe und mir in jeder Zelle nur die Adresse angezeigt wird...
Daher muss ich mir von JTextField schon nen eigenen Editor basteln, nur wie?

Mit der Faq komme ich leider auch nicht weiter, da dort der von der Table benutze Editor drin ist und ein JSpinner..., von dem kann ich das leider nicht auf meinen Fall übertragen.

Kann mir da jemand helfen?

Danke schonmal!

Mfg, Matflasch
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
U Was genau ist ein Shape-Objekt? AWT, Swing, JavaFX & SWT 3
DonBronson Objekt bewegen (Mausposition) AWT, Swing, JavaFX & SWT 3
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
C Objekt an paintComponent weitergeben AWT, Swing, JavaFX & SWT 1
M Swing Objekt Array in GUI ausgeben AWT, Swing, JavaFX & SWT 1
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
F Java FX Von der Fxml Datei zum Objekt AWT, Swing, JavaFX & SWT 8
M Swing Durch Usereingabe neues Objekt AWT, Swing, JavaFX & SWT 2
K Color-Objekt erzeugen in CMYK AWT, Swing, JavaFX & SWT 2
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
A Swing Null Pointer Exception obwohl Objekt initialisiert AWT, Swing, JavaFX & SWT 21
J gezeichnetes Objekt anklicken AWT, Swing, JavaFX & SWT 10
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L JavaFX als eigenes Objekt AWT, Swing, JavaFX & SWT 3
M [JavaFX] Objekt um Zentrum rotieren (Camera) AWT, Swing, JavaFX & SWT 1
E JavaFx Screne mehr als ein "Objekt" zuordnen ? AWT, Swing, JavaFX & SWT 2
F 2D-Grafik Objekt durch Einwirkung einer Kraft im Raum bewegen AWT, Swing, JavaFX & SWT 14
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
R Array aus einem Objekt auslesen AWT, Swing, JavaFX & SWT 4
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
S Objekt durch Tasteneingabe mehrmals drehen AWT, Swing, JavaFX & SWT 9
E Swing Objekt zu Position (Point) bewegen AWT, Swing, JavaFX & SWT 2
T 3D-Grafik (Java3D) Aus einem Objekt einer Szene (Würfel, Ebene) die wichtigen Randkoordinaten auslesen AWT, Swing, JavaFX & SWT 3
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
propra Schnittpunkt zwischen Objekt und Kante finden AWT, Swing, JavaFX & SWT 24
L Graphics Objekt - aus anderer Klasse aufrufen / übergeben AWT, Swing, JavaFX & SWT 5
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
I Swing Zugriff auf ein Objekt AWT, Swing, JavaFX & SWT 2
F Nur ein Objekt auf Canvas neu zeichnen AWT, Swing, JavaFX & SWT 4
R Möglichkeiten ein abgeleitetes Objekt zu erzeugen AWT, Swing, JavaFX & SWT 4
P Swing Wie bekomme ich eine Referenz auf ein Objekt das im EDT erzeugt wird? Und anderes... AWT, Swing, JavaFX & SWT 8
T Objekt in Kreisbahn bewegen AWT, Swing, JavaFX & SWT 5
B Zeichnen von Bildern auf JPanel aus eigenem Objekt AWT, Swing, JavaFX & SWT 19
V Parameter an Runnable-Objekt übergeben AWT, Swing, JavaFX & SWT 6
Dit_ Objekt mit ActionEvent übergeben AWT, Swing, JavaFX & SWT 2
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
A SWT SWT - Unbekannte Fläche (Objekt) erscheint im Composite AWT, Swing, JavaFX & SWT 6
D Objekt mit Button erstellen und mit anderem Button verwenden AWT, Swing, JavaFX & SWT 4
P Objekt kopieren AWT, Swing, JavaFX & SWT 2
M Graphics-Objekt aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
U [MVC] Objekt bearbeiten AWT, Swing, JavaFX & SWT 9
O Swing JTable Colum Objekt AWT, Swing, JavaFX & SWT 6
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
M Objekt im ActionListener ansprechen AWT, Swing, JavaFX & SWT 3
C Wie komme ich an ein Objekt aus einem JTree? AWT, Swing, JavaFX & SWT 10
R FlowLayout: 1 Objekt pro Zeile AWT, Swing, JavaFX & SWT 5
D Objekt (Map) in Textfeld ausgeben AWT, Swing, JavaFX & SWT 10
kirchrath Swing Aus ActionEvent Objekt herausfinden auf dem er ausgeführt wurde AWT, Swing, JavaFX & SWT 4
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
W Objekt-array als Raster visualisieren AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
G Tooltip Text für ein Shape Objekt AWT, Swing, JavaFX & SWT 2
D DnD ganzer Objekte(Objekt erstellen) AWT, Swing, JavaFX & SWT 2
G Wie ziehe ich ein Objekt aus einer JList? AWT, Swing, JavaFX & SWT 7
O JTable mit objekt-daten füllen AWT, Swing, JavaFX & SWT 4
B in jList feld aus einem objekt anzeigen AWT, Swing, JavaFX & SWT 2
R SWT color Objekt AWT, Swing, JavaFX & SWT 4
K Graphics-Objekt zeichnet nicht alle Bilder AWT, Swing, JavaFX & SWT 3
N Graphics Objekt "puffern" AWT, Swing, JavaFX & SWT 7
L Objekt in JComboBox einfügen AWT, Swing, JavaFX & SWT 2
S JComboBox, ein Renderer und das selektierte Objekt AWT, Swing, JavaFX & SWT 4
R Graphics Objekt ändern AWT, Swing, JavaFX & SWT 11
B actionPerformed reagiert nicht auf das Canvas-objekt AWT, Swing, JavaFX & SWT 11
J DocumentListener uebergibt Objekt; wie in JTextfield casten? AWT, Swing, JavaFX & SWT 3
B Objekt in "actionPerformed" erzeugen und nutzen AWT, Swing, JavaFX & SWT 3
P JSpinner Objekt anstatt Zahlen sollen man Namen auswählen AWT, Swing, JavaFX & SWT 2
B Ein Image Objekt drehen? AWT, Swing, JavaFX & SWT 2
G Referenz über MenuItem aus ActionListener auf das Objekt AWT, Swing, JavaFX & SWT 8
lin Welches Objekt für einen About-Dialog verwenden? AWT, Swing, JavaFX & SWT 2
R Selectable Graphics Objekt gesucht. AWT, Swing, JavaFX & SWT 5
Wildcard FontMetrics ohne Graphics-Objekt AWT, Swing, JavaFX & SWT 13
S objekt kann methode der aufrufenden klasse nicht aufrufen AWT, Swing, JavaFX & SWT 2
Y Objekt in JFrame AWT, Swing, JavaFX & SWT 3
K Objekt in eine bestimmte Zelle eines JTables legen AWT, Swing, JavaFX & SWT 3
D getResource() bei Image-Objekt AWT, Swing, JavaFX & SWT 9
A Problem mit dem graphics-Objekt AWT, Swing, JavaFX & SWT 8
D in neues Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 3
E warum erkennt er das objekt nicht???? AWT, Swing, JavaFX & SWT 4
G Fehler bei BasicStroke Objekt AWT, Swing, JavaFX & SWT 2
G Zurgriff auf Objekt über event.getComponent AWT, Swing, JavaFX & SWT 3
B TableCellRenderer rendert Integer/Boolean Felder nicht AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben