Hallo Leute,
ich zeige in einer Tabellenzelle mehrere Icons an. Diese symbolisieren den Status eines Datensatztes. Die Icondarstellung selber ist mit einem eigenen CellRenderer auch gar kein Problem, allerdings soll jedes Icon einen eigenen TooltipText erhalten.
ich verwende momentan folgenden Code:
Die Icons werden zwar alle schön dargestellt, jedoch bekomme ich keinen ToolTipText. Wenn ich dem in getTableCellRendererComponent zurückgegebenen mit pnl.setToolTipText("Text") einen Tooltip zuweise, dann funktioniert es. Das bringt jedoch nichts, da ich ja für jedes Icon einen eigenen Text haben möchte. Jemand eine Idee, wie ich das bewerkstelligen kann?
Vielen dank schonmal für Eure Antworten.
ich zeige in einer Tabellenzelle mehrere Icons an. Diese symbolisieren den Status eines Datensatztes. Die Icondarstellung selber ist mit einem eigenen CellRenderer auch gar kein Problem, allerdings soll jedes Icon einen eigenen TooltipText erhalten.
ich verwende momentan folgenden Code:
Java:
package de.germo.gco21c.dbinsert.gui;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.net.URL;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import org.jdesktop.swingx.JXLabel;
import org.jdesktop.swingx.JXPanel;
import de.germo.gco21c.dbinsert.MappingSet;
import de.germo.gco21c.dbinsert.VariableDefinition;
import de.germo.gco21c.dbinsert.models.MappingModel;
public class MappingTableCellRenderer extends DefaultTableCellRenderer {
/** serialVersionUID */
private static final long serialVersionUID = 7255985233079329289L;
/** MappingModel, enthält die Daten */
private MappingModel model = null;
/** Vector mit den Panels, die die anzuzeigenden Icons enthält*/
private Vector<JXPanel> iconPanels;
/**
* Konstruktor
*/
public MappingTableCellRenderer() {
model = MappingModel.getInstance();
}
/**
* @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
* @param table Tabelle, auf die der Renderer angewendet wird
* @param value Zeilenwertobjekt der Tabelle
* @param isSelected ist die aktuelle Zelle selektiert
* @param hasFocus hat die Zelle momentan den Focus
* @param row Zeile
* @param column Spalte
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (column == 0) {
JXPanel pnl = new JXPanel();
pnl.setLayout(null);
iconPanels = new Vector<JXPanel>();
if (isSelected) {
pnl.setBackground(table.getSelectionBackground());
pnl.setForeground(table.getSelectionForeground());
} else {
pnl.setBackground(table.getBackground());
pnl.setForeground(table.getForeground());
}
MappingSet mset = model.getMappingSet(row);
if (mset.getVarISNeu().isMapped() == false) {
addIcon("res/notMapped.png", "Variable wird nicht gemappt", pnl.getBackground());
} else {
if (mset.getVars21c().size() > 0) {
addIcon("res/ok.png", "Variable ist befüllt", pnl.getBackground());
boolean containsListNotSet = true;
if (mset.getVarISNeu().getEnclosedVars().size() > 1) {
addIcon("res/containsList.gif", "Enthält Variablenliste", pnl.getBackground());
containsListNotSet = false;
}
int maxSize = 1;
for (Iterator<VariableDefinition> iter = mset.getVars21c().iterator(); iter.hasNext();) {
VariableDefinition vdef = iter.next();
if (vdef.getEnclosedVars().size() > 1) {
if (maxSize < vdef.getEnclosedVars().size()) {
maxSize = vdef.getEnclosedVars().size();
}
}
if (maxSize > 1) {
if (containsListNotSet) {
addIcon("res/containsList.gif", "Enthält Variablenliste", pnl.getBackground());
}
}
if (mset.getVarISNeu().getEnclosedVars().size() > maxSize) {
addIcon("res/warning.png", "Einige Variablen werden nicht gefüllt", pnl.getBackground());
}
}
} else {
addIcon("res/noVarMapped.png", "Keine Variable gemappt", pnl.getBackground());
}
}
for (int i = 0; i < this.iconPanels.size(); i++) {
JXPanel tmpPanel = this.iconPanels.get(i);
tmpPanel.setBounds((i * 16), 0, 16, 16);
pnl.add(tmpPanel);
}
return pnl;
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
row, column);
}
/**
* Fügt ein icon hinzu
* @param iconPath Pfad auf die Grafikdatei des Icons
* @param toolTipText zu setztender TooltipText
* @param background zu setzende Hintergrundfarbe
*/
private void addIcon(String iconPath, String toolTipText, Color background) {
ClassLoader cl = getClass().getClassLoader();
JXLabel tmpLbl = new JXLabel();
tmpLbl.setSize(16, 16);
tmpLbl.setMaximumSize(new Dimension(16,16));
tmpLbl.setBounds(0, 0, 16, 16);
URL url = cl.getResource(iconPath);
tmpLbl.setIcon(new ImageIcon(url));
JXPanel tmpPnl = new JXPanel();
tmpPnl.setLayout(null);
tmpPnl.setSize(16, 16);
tmpPnl.setMaximumSize(new Dimension(16,16));
tmpPnl.setToolTipText(toolTipText);
tmpPnl.setBackground(background);
tmpPnl.add(tmpLbl);
iconPanels.add(tmpPnl);
}
}
Die Icons werden zwar alle schön dargestellt, jedoch bekomme ich keinen ToolTipText. Wenn ich dem in getTableCellRendererComponent zurückgegebenen mit pnl.setToolTipText("Text") einen Tooltip zuweise, dann funktioniert es. Das bringt jedoch nichts, da ich ja für jedes Icon einen eigenen Text haben möchte. Jemand eine Idee, wie ich das bewerkstelligen kann?
Vielen dank schonmal für Eure Antworten.