Discussion:
Image in JTable einfügen
(zu alt für eine Antwort)
Schoetz Florian
2004-06-29 15:10:09 UTC
Permalink
Hallo NG!


Ist es möglich in ein JTable ein Bild einzufügen und wenn ja wie?
Wäre für jegliche Hilfe dankbar.

mfg
Flo
Sascha Broich
2004-06-29 15:21:45 UTC
Permalink
Post by Schoetz Florian
Hallo NG!
Ist es möglich in ein JTable ein Bild einzufügen und wenn ja wie?
Wäre für jegliche Hilfe dankbar.
Benutze einen eigenen TableCellRenderer.


Sascha Broich
--
Schlage nie jemand grundlos.
Ein Grund findet sich immer.
Peter Büttner
2004-06-29 21:16:45 UTC
Permalink
Post by Schoetz Florian
Ist es möglich in ein JTable ein Bild einzufügen und wenn ja wie?
Wäre für jegliche Hilfe dankbar.
Ein Icon/ImageIcon einfügen. Wenn du ein eigens TableModel hast
gibst du das 'statt einem String' zurück, bei getColumnClass()
Icon.class.

Die DefaultTableRenderer kennen das bereits.



Grüße
Peter
--
Shell&Jar : Individual icons for jars
jMineSweeper : extended
www.PeterBuettner.de
Schoetz Florian
2004-06-30 10:51:51 UTC
Permalink
Ist es m glich in ein JTable ein Bild einzuf gen und wenn ja wie?
W re f r jegliche Hilfe dankbar.
Ein Icon/ImageIcon einf gen. Wenn du ein eigens TableModel hast
gibst du das 'statt einem String' zur ck, bei getColumnClass()
Icon.class.
Die DefaultTableRenderer kennen das bereits.
Gr e
Peter
Danke für die Tipps, jetzt wird das Bild schon
hineingeladen...allerdings in die gesamte Spalte, da ich keine
einzelne Zelle ansprechen kann. Es scheint nur getColumn() zu geben.
Wie kann ich das lösen?
Und noch was...
Ich lasse einen Zähler mitlaufen der nacheinander verschiedene Bilder
in eine Zelle nach der anderen einfügen soll. Jedoch wird bei mir
nicht nur das neue Bild in die neue Spalte eingefügt sondern
zusätzlich das erste Bild mit dem zweiten ersetzt. An was liegt das?

int count;
ausgabe = new JTable(5,5);

MyInternalFrame.dtcr.setIcon(getImageIcon());
MyInternalFrame.ausgabe.getColumnModel().getColumn(count).setCellRenderer(
MyInternalFrame.dtcr);

count++


dtcr ist der DefaultTableCellRenderer


Gruß Flo
Peter Büttner
2004-06-30 12:03:47 UTC
Permalink
Post by Schoetz Florian
Ist es m glich in ein JTable ein Bild einzuf gen und wenn ja wie?
W re f r jegliche Hilfe dankbar.
Ein Icon/ImageIcon einf gen. Wenn du ein eigens TableModel hast
gibst du das 'statt einem String' zur ck, bei getColumnClass()
Icon.class.
[...]
Post by Schoetz Florian
hineingeladen...allerdings in die gesamte Spalte, da ich keine
einzelne Zelle ansprechen kann. Es scheint nur getColumn() zu geben.
[...]
Post by Schoetz Florian
int count;
ausgabe = new JTable(5,5);
MyInternalFrame.dtcr.setIcon(getImageIcon());
MyInternalFrame.ausgabe.getColumnModel().getColumn(count).setCellRenderer(
MyInternalFrame.dtcr);
Hier setzt du ein Icon fest für einen Renderer, und diesen dann zum
zeichnen der Spalte. Der Renderer wird immer wieder nach seinem Inhalt
gefragt, da du denselben (das gehört so) für alle Icon-Zellen verwendest
passiert das so.

Verwendest du ein eigenes TableModel?
Oder fügst du deine Daten über einen Vector in die Tabelle ein?

Ich meinte getColumnClass() des _TABLE_Models.
Ich such mal ein Beispiel... mit einem AbstractTableModel.


Als Gimmick passt es noch die Zeilenhöhe an die Bilder an:

------------------------------------------------------------------
import java.awt.Component;

import javax.swing.*;

public class IconInTable extends JFrame {
public static void main(String[] args) {new IconInTable();}

public IconInTable() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JTable t = new JTable(new ATableModel());
getContentPane().add(new JScrollPane(t));
setCellSizes(t);
pack();
show();
}

static class ATableModel extends javax.swing.table.AbstractTableModel{
Icon icon = new ImageIcon(
getClass().getResource("/javax/swing/plaf/metal/icons/Inform.gif")
);

public Class getColumnClass(int col) {
return col%3>0? Object.class:Icon.class;
}
public int getColumnCount() {return 10;}
public int getRowCount() {return 30;}
public Object getValueAt(int r, int c){
if (c%3>0) return (char)('A'+c)+""+r;
else return icon;
}
}

static void setCellSizes(JTable t){
int nRow = t.getRowCount();
int nCol = t.getColumnCount();
if (nRow<1 || nCol<1) return;

double maxH = 0;
for (int r=0; r<nRow; r++) {
for (int c=0; c<nCol; c++) {
Component rend = t.prepareRenderer(t.getCellRenderer(r,c),r,c);
maxH = Math.max(rend.getPreferredSize().height,maxH);
}
t.setRowHeight(r, (int) maxH);
}
}

}
------------------------------------------------------------------




Grüße
Peter
--
Shell&Jar : Individual icons for jars
jMineSweeper : extended
www.PeterBuettner.de
Schoetz Florian
2004-07-01 14:42:52 UTC
Permalink
Ich verwende kein eigenes TableModel und meine Bilder werden
nacheinander durch Ausschneiden aus einem Bild erzeugt.
D.h. es sollen immer wieder neue Bildauschnitte in das Table
gezeichnet werden, die ich mit CropImage erzeuge.

Gruß Flo
Peter Büttner
2004-07-01 17:14:37 UTC
Permalink
Post by Schoetz Florian
Ich verwende kein eigenes TableModel und meine Bilder werden
nacheinander durch Ausschneiden aus einem Bild erzeugt.
Eigenes TableModel macht es letztlich einfacher. Hier mal ein snippet,
ohne Nachdenken hinger**** :

Icon icon = new ImageIcon(... );

Vector rows = new Vector();
for(int i=0;i<10;i++)
rows.add(new Vector(Arrays.asList(new Object[]{"Ha "+i, "Hi "+i,
icon})));
Vector names = new Vector(Arrays.asList(new String[]{"Ha", "Hi",
"Icon"}));

DefaultTableModel model = new DefaultTableModel(rows, names){
public Class getColumnClass(int col){
return col==2 ? Icon.class : super.getColumnClass(col);
}
};
Post by Schoetz Florian
D.h. es sollen immer wieder neue Bildauschnitte in das Table
gezeichnet werden, die ich mit CropImage erzeuge.
Wenn die alle verschieden sind und du nicht für jedes Feld ein
eigenes ImageIcon anlegen willst kannst du dir auch eine Klasse
die Icon implementiert bauen:

class MyIcon implements Icon{
public MyIcon( Image alle, int offsetX, int offsetX, int width, int height){
// hier 'alle' nur merken, nicht rauskopieren
...
}
...
}

Wenn sich ein Ausschnitt ändert passenden TableEvent feuern.


Grüße
Peter
--
Shell&Jar : Individual icons for jars
jMineSweeper : extended
www.PeterBuettner.de
Loading...