Hallo,
ich möchte in die erste Spalten meiner Tabelle immer ein Icon haben. Habe gelesen, dass dies mittels eines CellRenderes geht.
Hier ist nun mein Versuch das Ganze zu realisieren:
Habe mich dabei hieran orientiert: JTable
Doch funktioniert das nicht so, wie ich es versuche (Ich bekomme immer eine NullPointerException, da mir aber nicht angezeigt wird in welcher Zeile der ist, kann ich dies nicht genau sagen. aber ich nehm mal an es hat mit dem bild zu tun).
hoffe jemand kann licht ins dunkel bringen und mir weiterhelfen. danke schonmal
EDIT: Habs nun gelöst:
+
ich möchte in die erste Spalten meiner Tabelle immer ein Icon haben. Habe gelesen, dass dies mittels eines CellRenderes geht.
Hier ist nun mein Versuch das Ganze zu realisieren:
Java:
public JTable createFriendsTree() {
DBManager dbManager = new DBManager();
Vector colNames = new Vector();
colNames.add("");
colNames.add("Freundesliste");
colNames.add("1");
Vector rowData = new Vector();
Vector curRow = new Vector();
try {
ResultSet friend = dbManager.selectFromDB("SELECT name "
+ "FROM MusicBuddies.Friend");
while (friend.next()) {
curRow.add(new ImageIcon(getClass()
.getResource("images/user.jpg")));
curRow.add(friend.getString(1).replaceAll("@ap@", "'"));
curRow.add("1");
rowData.add(curRow);
}
} catch (Exception ex) {
ErrorHandling.error("Friendlist", "createFriendsTree",
1, "Fehler: Keine Freundesliste vorhanden.", ex);
}
JTable table = new JTable(rowData, colNames);
table.setRowHeight(18);
table.setShowHorizontalLines(false);
table.setIntercellSpacing(new Dimension(0, 0));
table.setShowVerticalLines(false);
table.getColumn("").setCellRenderer(new 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);
if (value != null) {
label.setText("");
label.setIcon((ImageIcon) value);
}
return label;
}
});
return table;
}
Doch funktioniert das nicht so, wie ich es versuche (Ich bekomme immer eine NullPointerException, da mir aber nicht angezeigt wird in welcher Zeile der ist, kann ich dies nicht genau sagen. aber ich nehm mal an es hat mit dem bild zu tun).
hoffe jemand kann licht ins dunkel bringen und mir weiterhelfen. danke schonmal
EDIT: Habs nun gelöst:
Java:
public class LabelRenderer extends JLabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setIcon(createImageIcon("../gui/images/user.jpg", ""));
setText(value.toString());
return this;
}
/**
* ...
* @param path Strubg
* @param description String
* @return ...
*/
protected static ImageIcon createImageIcon(String path, String description) {
java.net.URL imgURL = LabelRenderer.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
}
Java:
table.getColumn("Icon").setCellRenderer(new LabelRenderer());
Zuletzt bearbeitet: