PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JTable vereinfachen und Renderer, Editor...?



Matflasch
16-11-2004, 08:47
Hi,

also jetzt kommts... ;)

Eine Art Tutorial, was noch erweitert werden soll... (muss!)

Ganz grob:
Ich habe ein BO_Table, ein BO_TableColumn und ein BO_TableCell Objekt. Diese Objekte enthalten nur Daten und aus denen wird die Table gebastelt.
(Code ist unten).

Nun habe ich mir eine Klasse von JTable abgeleitet. Dieser Klasse wird ein BO_Table Objekt, ein BO_TableColumn[] Objekt und ein Object[][] Data übergeben.
Aus diesen 3 Objekten setzt sich die gesamte Table selbst zusammen. Je nachdem, wie viele Columns das BO_TableColumn[] hat...

Ein Beispielaufbau wäre folgender:



// BO_Table Objekt
BO_Table t_objBO_Table = new BO_Table();
t_objBO_Table.setEditable(true);

// BO_TableColumns Objekt
BO_TableColumn[] t_objBO_Tbc = new BO_TableColumn[6];
t_objBO_Tbc[0] = new BO_TableColumn();
t_objBO_Tbc[1] = new BO_TableColumn();
t_objBO_Tbc[2] = new BO_TableColumn();
t_objBO_Tbc[3] = new BO_TableColumn();
t_objBO_Tbc[4] = new BO_TableColumn();
t_objBO_Tbc[5] = new BO_TableColumn();

t_objBO_Tbc[0].setStrHeaderValue("Nr");
t_objBO_Tbc[1].setStrHeaderValue("Name");
t_objBO_Tbc[2].setStrHeaderValue("Interpret");
t_objBO_Tbc[3].setStrHeaderValue("Länge");
t_objBO_Tbc[4].setStrHeaderValue("Lyric");
t_objBO_Tbc[5].setStrHeaderValue("Info");

t_objBO_Tbc[0].setClaClass(Integer.class);
t_objBO_Tbc[1].setClaClass(String.class);
t_objBO_Tbc[2].setClaClass(JComboBox.class);
t_objBO_Tbc[3].setClaClass(String.class);
t_objBO_Tbc[4].setClaClass(String.class);
t_objBO_Tbc[5].setClaClass(String.class);

t_objBO_Tbc[2].setTcrTableCellRenderer(getMtf_StdCmbTbcRenderer( ));
t_objBO_Tbc[2].setTceTableCellEditor(new DefaultCellEditor(getMtf_StdComboBox()));

tblAddSampler = new Mtf_StdTable(t_objBO_Table, getTblData(), t_objBO_Tbc);


Also wird das BO_Table Objekt erstellt und die Eigenschaften werden eingestellt.
Dann wird das BO_TableColumn Objekt erstellt und mit entsprechenden Classes und Namen etc versehen.
Die Daten kommen in meinem Fall aus ner DB und sind entsprechend mit der Anzahl der Columns, die Anzahl der Rows ist ja egal...
Das 'besondere' an den Daten ist, dass bei dem DefaultTableCellRenderer ja ein Objekt übergeben wird. Somit braucht es nicht nur ein String sein, sondern kann so ziemlich alles sein. Hier mache ich das so, dass ich die Daten aus der Datenbank auslese und in ein BO_TableCell Objekt packe...



// Achtung: Hier handelt es sich um eine leere Table für die Eingabe
// von Daten. getIntTrackAnz() wird mit einer JComboBox ausgewählt
// und mit einem ItemState-Listener wird die Table automatisch
// entsprechende gefüllt
Object[][] obj = new Object[getIntTrackAnz()][6];
for(int i=0; i<getIntTrackAnz(); i++) {
// Nr
BO_TableCell tceNr = new BO_TableCell();
tceNr.setValue(String.valueOf(i+1));
obj[i][0] = tceNr;
// Name
BO_TableCell tceName = new BO_TableCell();
tceName.setValue("");
obj[i][1] = tceName;
// Interpret
BO_TableCell tceInterpret = new BO_TableCell();
tceInterpret.setValue("");
obj[i][2] = tceInterpret;
// Laenge
BO_TableCell tceLaenge = new BO_TableCell();
tceLaenge.setValue("");
obj[i][3] = tceLaenge;
// Lyric
BO_TableCell tceLyric = new BO_TableCell();
tceLyric.setValue("");
obj[i][4] = tceLyric;
// Info
BO_TableCell tceInfo = new BO_TableCell();
tceInfo.setValue("");
obj[i][5] = tceInfo;
}


Nun ist die Table gefüllt und die Daten können eingegeben werden.
Die Eingabe der Daten erweist sich jedoch als nicht so einfach, wie ich es angenommen habe; Bei der JTable wird ja der DefaultEditor verwendet, wenn man nichts anderes angibt. Da ich abe ein Objekt in jeder Zelle habe und Object->value in dem JLabel des DefaultTableCellRenderers steht, gibt es ein wenig probleme beim editieren...

Abfragen kann man den Wert der Celle ganz leicht...


BO_TableCell tce = (BO_TableCell) getTblAddSampler().getValueAt(row, col);
tce.getValue().toString();


Allerdings ist das mit dem Editor nicht so ganz so leicht, und dies bekomme ich leider nicht hin...
Wie kann ich den TableCellEditor und den TableCellRenderer gut miteinander laufen lassen?
Bei einer JComboBox ist es z.B. das gleiche, ich bekomme es nicht wirklich hin, dass die JComboBox in der TableCell ist. Entweder die ganze Column hat insgesamt eine JComboBox oder das Selektieren klappt nicht richtig...
Kann mir das mit dem TableCellEditor/TableCellRenderer nochmal jemand näher erklären?
Das wäre sehr nett!

Soweit erstmal, ich habe die ganzen Quelltexte unten mal eingefügt, falls jemand interesse daran hat, denn im prinzip macht es die Table sehr leicht, man braucht nichtmehr an alles mögliche denken und hat weniger Quelltext, wenn man diese Art des Aufbaus verwendet...

Mfg, Matflasch

Matflasch
16-11-2004, 08:47
BO_Table:


public class BO_Table {
// Ist die Tabelle aktiviert?
// Default: true
private boolean bolEnabled = true;
// Spalten vom Model erzeugen lassen?
// Default: false
private boolean bolAutoCreateColumnsFromModel = false;
// AutoResizeMode
// JTable.AUTO_RESIZE_OFF = 0
// JTable.AUTO_RESIZE_NEXT_COLUMN = 1
// JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS = 2
// JTable.AUTO_RESIZE_LAST_COLUMN = 3
// JTable.AUTO_RESIZE_ALL_COLUMNS = 4
// Default: 0
private int intAutoResizeMode = 4;
// Anzahl der Spalten
private int intAnzColumns = 0;
// Anzahl der Zeilen
private int intAnzRows = 0;
// Schrift
// Default: Font("Dialog", java.awt.Font.PLAIN, 12)
private Font fntFont = new Font("Dialog", java.awt.Font.PLAIN, 12);
// Tabelle beim starten fuellen?
// Default: true
private boolean bolFillAtStartup = true;
// ToolTipText
// Default: null
private String strToolTipText = null;
// Vordergrundfarbe
// Default: Color.black
private Color colForegroundColor = Color.black;
// Hintergrundfarbe
// Default: Color.white
private Color colBackgroundColor = Color.white;
// Zeilenhoehe
// Default = 16
private int intRowHeight = 16;
// Platz vom Zellinhalt zum Gitter
// Default = Dimension(1,1)
private Dimension dimInterCellSpacing = new Dimension(1, 1);
// Bevorzugte Groesse
// Default: null
private Dimension dimPreferredSize = null;
// Groesse
// Default: null
private Dimension dimSize = new Dimension(200,200);
// Zeilen-Selektierung erlaubt?
// Default: true
private boolean bolRowSelectionAllowed = true;
// Zellen-Selektierung erlaubt?
// Default: false
private boolean bolCellSelectionAllowed = false;
// Spalten-Selektierung erlaubt?
// Default: false
private boolean bolColumnSelectionAllowed = false;
// Grid anzeigen?
// Default: true
private boolean bolShowGrid = true;
// Horizontale Linien anzeigen
// Default: true
private boolean bolShowHorizontalLines = true;
// Verticale Linien anzeigen
// Default: true
private boolean bolShowVerticalLines = true;
// Farbe vom Grid
// Default: null
private Color colGridColor = Color.lightGray;
// Selektion
// ListSelectionModel.SINGLE_SELECTION = 0
// ListSelectionModel.SINGLE_INTERVAL_SELECTION = 1
// ListSelectionModel.MULTIPLE_INTERVAL_SELECTION = 2
// Standard: ListSelectionModel.SINGLE_SELECTION
private int intSelectionMode = ListSelectionModel.SINGLE_SELECTION;
// Cursor
// Standard: Cursor.DEFAULT_CURSOR
private Cursor curCursor = new Cursor(Cursor.DEFAULT_CURSOR);
// Lokale Einstellungen
// Standard: de_DE@euro
private Locale locLocale = new Locale("de", "DE", "EURO");
// Maximum Size
private Dimension dimMaxSize = null;
// Minimum Size
private Dimension dimMinSize = null;
// Location
private Point pntLocation = null;
// Border
private Border bdrBorder = null;
// Editable
private boolean editable = false;
... getter und setter...
}

BO_TableColumn:


public class BO_TableColumn {
// Spaltenüberschrift
private String strHeaderValue = null;
// Tooltiptext
private String strToolTipText = null;
// Spaltenbreite
private int intWidth = 90;
// Ausrichtung
private String strAlign = null;
// Ausrichtung horizontal
// SwingConstants.LEFT
// SwingConstants.CENTER
// SwingConstants.RIGHT
// SwingConstants.LEADING
// SwingConstants.TRAILING
private int intHorizontalAlign = 0;
// Ausrichtung vertical
// SwingConstants.TOP
// SwingConstants.CENTER
// SwingConstants.BOTTOM
private int intVerticalALign = 0;
// Vordergrundfarbe
private Color colForegroundColor = null;
// Hintergrundfarbe
private Color colBackgroundColor = null;
// Icon
private Icon icoIcon = null;
// Schriftart
private Font fntFont = null;
// ModelIndex
private int intModelIndex = 0;
// Größe veränderbar?
private boolean bolResizeable = true;
// Class für den Renderer
private Class claClass = null;
// Aktiviert?
private boolean bolEnabled = true;
// CellEditor
private TableCellEditor tceTableCellEditor = null;
// CeellRenderer
private TableCellRenderer tcrTableCellRenderer = null;
... getter und setter...
}

BO_TableCell:


public class BO_TableCell {
// Zellen-Wert
// Default: null
private Object Value = null;
// ToolTipText
// Default: null
private String ToolTipText = null;
// Vordergrundfarbe
// Default: null
private Color foregroundColor = null;
// Hintergrundfarbe
// Default: null
private Color backgroundColor = null;
// Icon
// Default: null
private Icon Icon = null;
// Ausrichtung horizontal
// SwingConstants.LEFT
// SwingConstants.CENTER
// SwingConstants.RIGHT
// SwingConstants.LEADING
// SwingConstants.TRAILING
// Default: 0
private int horizontalAlign = 0;
// Ausrichtung vertical
// SwingConstants.TOP
// SwingConstants.CENTER
// SwingConstants.BOTTOM
// Default: 0
private int verticalAlign = 0;
// Schriftart
// Default: null
private Font Font = null;
// CellEditor
// Default: null
private TableCellEditor TableCellEditor = null;
// CellRenderer
// Default: null
private TableCellRenderer TableCennRenderer = null;
// Icon
// Default: null
private ImageIcon displayedIcon = null;
// HorizontalTextPosition
// SwingConstants.LEFT
// SwingConstants.CENTER
// SwingConstants.RIGHT
// SwingConstants.LEADING
// SwingConstants.TRAILING
// Default: SwingConstants.CENTER
private int horizontalTextPosition = SwingConstants.CENTER;
// Locale
// Default: de_DE@euro
private Locale Locale = new Locale("de", "DE", "EURO");
... getter und setter...
}

Matflasch
16-11-2004, 08:48
Mtf_StdTable von JTable abgeleitet:


public class Mtf_StdTable extends JTable {
// Anhand dieser Klassen wird das Renderer / Editor gewählt
private Class[] classes = null;
// Renderer
private Mtf_StdTblRenderer renderer = null;
// Editor
private Mtf_StdTblEditor editor = null;
// TableModel
private Mtf_DftTblModel DftTblModel = null;

// Die TableColumns
private Mtf_StdTableColumn[] tbc = null;
// Die Daten
private Object[][] data = null;
// Die Spaltenüberschrift für das TableModel
private String[] header = null;
// BO_Table Optionen Objekt
private BO_Table objBO_Table = null;

// Konstruktor
public Mtf_StdTable(BO_Table p_objBO_Table, Object[][] objData, BO_TableColumn[] p_boTableColumn) {
initialize();
// BO_Table Objekt setzen
setObjBO_Table(p_objBO_Table);
// BO_Table Objekt eigenschaften
mtf_setTablePrefs();
// Data Objekt setzen
setData(objData);
// TableColumn Objekt setzen
setTbc(new Mtf_StdTableColumn[p_boTableColumn.length]);
// Class setzen
setClasses(new Class[p_boTableColumn.length]);
// Header setzen
setHeader(new String[p_boTableColumn.length]);
//--------------------------------------------------
// TableColumns erzeugen
//--------------------------------------------------
for (int i=0; i<p_boTableColumn.length; i++) {
// TableColumn erzeugen
getTbc()[i] = new Mtf_StdTableColumn(p_boTableColumn[i]);
// Model Index setzen
getTbc()[i].setModelIndex(i);
// Zum Table hinzufügen
this.addColumn(getTbc()[i]);
// Dem TblModel hinzufügen
getDftTblModel().addColumn(getTbc()[i]);
// Class setzen
getClasses()[i] = p_boTableColumn[i].getClaClass();

}
// Model setzen
this.setModel(getDftTblModel());
// Data setzen
setData(objData);
// Falls die Tabelle beim Start gefüllt werden soll
if (p_objBO_Table.isBolFillAtStartup()) {
// Die Daten dem TableModel geben
getDftTblModel().setDataVector(getData(), getHeader());
}

}

public void mtf_setTablePrefs() {
//-------------------------------------------------
// TableEigenschaften setzen
//-------------------------------------------------
// Hintergrundfarbe setzen
if (getObjBO_Table().getColBackgroundColor() != null
&& getObjBO_Table().getColBackgroundColor().toString( ).length() > 0) {
this.setBackground(getObjBO_Table().getColBackgrou ndColor());
}
// Vordergrundfarbe setzen
if (getObjBO_Table().getColForegroundColor() != null
&& getObjBO_Table().getColForegroundColor().toString( ).length() > 0) {
this.setForeground(getObjBO_Table().getColForegrou ndColor());
}
// Schriftart/Groesse setzen
if (getObjBO_Table().getFntFont() != null && getObjBO_Table().getFntFont().toString().length() > 0) {
this.setFont(getObjBO_Table().getFntFont());
}
// Abstand zwischen Zellen
if (getObjBO_Table().getDimInterCellSpacing() != null
&& getObjBO_Table().getDimInterCellSpacing().toString ().length() > 0) {
this.setIntercellSpacing(getObjBO_Table().getDimIn terCellSpacing());
}
// Zeilenhoehe setzen
if (getObjBO_Table().getIntRowHeight() > 0) {
this.setRowHeight(getObjBO_Table().getIntRowHeight ());
}
// ToolTipText setzen
if (getObjBO_Table().getStrToolTipText() != null && getObjBO_Table().getStrToolTipText().length() > 0) {
this.setToolTipText(getObjBO_Table().getStrToolTip Text());
}
// Selection Mode
if (getObjBO_Table().getIntSelectionMode() == 0
|| getObjBO_Table().getIntSelectionMode() == 1
|| getObjBO_Table().getIntSelectionMode() == 2) {
this.setSelectionMode(getObjBO_Table().getIntSelec tionMode());
}
// AutoResizeMode
if (getObjBO_Table().getIntAutoResizeMode() == 0
|| getObjBO_Table().getIntAutoResizeMode() == 1
|| getObjBO_Table().getIntAutoResizeMode() == 2
|| getObjBO_Table().getIntAutoResizeMode() == 3
|| getObjBO_Table().getIntAutoResizeMode() == 4) {
this.setAutoResizeMode(getObjBO_Table().getIntAuto ResizeMode());
}
// Preferred Size
if (getObjBO_Table().getDimPreferredSize() != null
&& getObjBO_Table().getDimPreferredSize().toString(). length() > 0) {
this.setPreferredSize(getObjBO_Table().getDimPrefe rredSize());
}
// Cursor setzen
if (getObjBO_Table().getCurCursor() != null && getObjBO_Table().getCurCursor().toString().length( ) > 0) {
this.setCursor(getObjBO_Table().getCurCursor());
}
// Size
if (getObjBO_Table().getDimSize() != null && getObjBO_Table().getDimSize().toString().length() > 0) {
this.setSize(getObjBO_Table().getDimSize());
}
// Grid-Color
if (getObjBO_Table().getColGridColor() != null && getObjBO_Table().getColGridColor().toString().leng th() > 0) {
this.setGridColor(getObjBO_Table().getColGridColor ());
}
// Locale
if (getObjBO_Table().getLocLocale() != null && getObjBO_Table().getLocLocale().toString().length( ) > 0) {
this.setLocale(getObjBO_Table().getLocLocale());
}
// Maximum Size
if (getObjBO_Table().getDimMaxSize() != null && getObjBO_Table().getDimMaxSize().toString().length () > 0) {
this.setMaximumSize(getObjBO_Table().getDimMaxSize ());
}
// Minimum Size
if (getObjBO_Table().getDimMinSize() != null && getObjBO_Table().getDimMinSize().toString().length () > 0) {
this.setMinimumSize(getObjBO_Table().getDimMinSize ());
}
// Location
if (getObjBO_Table().getPntLocation() != null && getObjBO_Table().getPntLocation().toString().lengt h() > 0) {
this.setLocation(getObjBO_Table().getPntLocation() );
}
// Border
if (getObjBO_Table().getBdrBorder() != null && getObjBO_Table().getBdrBorder().toString().length( ) > 0) {
this.setBorder(getObjBO_Table().getBdrBorder());
}
// Anzahl der Spalten
if (getObjBO_Table().getIntAnzColumns() > 0) {
getDftTblModel().setColumnCount(getObjBO_Table().g etIntAnzColumns());
}
// Anzahl der Zeilen
if (getObjBO_Table().getIntAnzRows() > 0) {
getDftTblModel().setRowCount(getObjBO_Table().getI ntAnzRows());
}
// Row-Count setzen
if(getObjBO_Table().getIntAnzRows() > 0) {
this.getDftTblModel().setRowCount(getObjBO_Table() .getIntAnzRows());
}
// Zellenselektierung erlaubt?
this.setCellSelectionEnabled(getObjBO_Table().isBo lCellSelectionAllowed());
// Spaltenselektierung erlaubt?
this.setColumnSelectionAllowed(getObjBO_Table().is BolColumnSelectionAllowed());
// Zeilenselektierung erlaubt?
this.setRowSelectionAllowed(getObjBO_Table().isBol RowSelectionAllowed());
// Grid anzeigen?
this.setShowGrid(getObjBO_Table().isBolShowGrid()) ;
// Horizontale Linien anzeigen
this.setShowHorizontalLines(getObjBO_Table().isBol ShowHorizontalLines());
// Verticale Linien anzeigen
this.setShowVerticalLines(getObjBO_Table().isBolSh owVerticalLines());
// AutoCreateColumnsFromModel
this.setAutoCreateColumnsFromModel(getObjBO_Table( ).isBolAutoCreateColumnsFromModel());
// Ist die Tabelle aktiviert?
this.setEnabled(getObjBO_Table().isBolEnabled());
// Ist die Tabelle editierbar?
getDftTblModel().setEditable(getObjBO_Table().isEd itable());

}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
try {
//-----------------------------------------
// Renderer setzen
//-----------------------------------------
// String
this.setDefaultRenderer(String.class, getRenderer());
// Number
this.setDefaultRenderer(Number.class, getRenderer());
// Integer
this.setDefaultRenderer(Integer.class, getRenderer());
// Icon
this.setDefaultRenderer(Icon.class, getRenderer());
// ImageIcon
this.setDefaultRenderer(ImageIcon.class, getRenderer());
// Float
this.setDefaultRenderer(Float.class, getRenderer());
// Double
this.setDefaultRenderer(Double.class, getRenderer());
// ComboBox Renderer
// this.setDefaultRenderer(JComboBox.class, getMtf_StdCmbTbcRenderer());

//--------------------------------------------
// Editoren setzen
//--------------------------------------------
// String
this.setDefaultEditor(String.class, new DefaultCellEditor(getEditor()));
// Number
this.setDefaultEditor(Number.class, new DefaultCellEditor(getEditor()));
// Integer
this.setDefaultEditor(Integer.class, new DefaultCellEditor(getEditor()));
// Float
this.setDefaultEditor(Float.class, new DefaultCellEditor(getEditor()));
// Double
this.setDefaultEditor(Double.class, new DefaultCellEditor(getEditor()));
// JComboBox
// this.setDefaultEditor(JComboBox.class, new DefaultCellEditor(getMtf_StdCmbTbcRenderer()));
} catch (java.lang.Throwable e) {
// Do Something
}
}

// Hiermit sucht sich die Table den Renderer
public Class getColumnClass(int index) {
return classes[index];
}
... getter und setter...
}


Mtf_StdTableColumn von TableColumn abgeleitet


public class Mtf_StdTableColumn extends TableColumn {
public Mtf_StdTableColumn(BO_TableColumn p_boTbc) {
super();
// HeaderValue
if (p_boTbc.getStrHeaderValue() != null && p_boTbc.toString().length() > 0) {
this.setHeaderValue(p_boTbc.getStrHeaderValue());
}
// Width
if (p_boTbc.getIntWidth() != 0 && p_boTbc.getIntWidth() > 0) {
this.setWidth(p_boTbc.getIntWidth());
}
// ModelIndex
if (p_boTbc.getIntModelIndex() >= 0) {
this.setModelIndex(p_boTbc.getIntModelIndex());
}
// CellEditor
if (p_boTbc.getTceTableCellEditor() != null && p_boTbc.getTceTableCellEditor().toString().length( ) > 0) {
this.setCellEditor(p_boTbc.getTceTableCellEditor() );
}
// CellRenderer
if (p_boTbc.getTcrTableCellRenderer() != null && p_boTbc.getTcrTableCellRenderer().toString().lengt h() > 0) {
this.setCellRenderer(p_boTbc.getTcrTableCellRender er());
}
// Resizeable
this.setResizable(p_boTbc.isBolResizeable());
initialize();
}

private void initialize() {
try {
this.setPreferredWidth(90);
} catch (java.lang.Throwable e) {
// Do Something
}
}
}


Standard String Renderer:


public class Mtf_StdTblRenderer extends DefaultTableCellRenderer {

// Konstruktur
public Mtf_StdTblRenderer() {
initialize();
}

private void initialize() {
try {
}
catch (java.lang.Throwable e) {
// Do Something
}
}

public String HTMLRendererToolTipParser(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("<br>");
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;

setText(tbc.getValue().toString());
setToolTipText(tbc.getToolTipText());
Value = tbc.getValue().toString();

return this;
}
}


Standard Cell Editor, abgeleitet von JTextField:


public class Mtf_StdTblEditor extends JTextField implements TableCellEditor {
/**
* This method initializes
*
*/
public Mtf_StdTblEditor() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
try {
this.setBorder(javax.swing.BorderFactory.createLin eBorder(java.awt.Color.gray,0));

}
catch (java.lang.Throwable e) {
// Do Something
}
}
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;
}
public Object getCellEditorValue() {
return "Test";
}
public boolean isCellEditable(EventObject arg0) {
return true;
}
public boolean shouldSelectCell(EventObject arg0) {
return true;
}
public boolean stopCellEditing() {
return false;
}
public void cancelCellEditing() {
}
public void addCellEditorListener(CellEditorListener arg0) {
}
public void removeCellEditorListener(CellEditorListener arg0) {
}
}


ComboBox Renderer:


public class Mtf_StdCmbTbcRenderer extends JComboBox implements TableCellRenderer {
private DefaultComboBoxModel DftCbm = null;

public Component getTableCellRendererComponent(
JTable tbl,
Object value,
boolean selected,
boolean hasfocus,
int row,
int col) {

Mtf_StdCmbTbcEditor edi = (Mtf_StdCmbTbcEditor) tbl.getCellEditor(row, col);
Mtf_StdCmbTbcRenderer ren = (Mtf_StdCmbTbcRenderer) tbl.getCellRenderer(row, col);
Object val = edi.getCellEditorValue();
ren.setSelectedItem(val);
System.out.println("RendererValue: " + val.toString());

return this;
}
public DefaultComboBoxModel getDftCbm() {
if(DftCbm == null) {
try {
DftCbm = new DefaultComboBoxModel();
this.setModel(DftCbm);
} catch (Exception e) {
e.printStackTrace();
}
}
return DftCbm;
}
public void setDftCbm(DefaultComboBoxModel model) {
DftCbm = model;
}
}


ComboBox Editor:


public class Mtf_StdCmbTbcEditor extends JComboBox implements TableCellEditor {
private DefaultComboBoxModel DftCbm = null;


public Component getTableCellEditorComponent(JTable arg0, Object arg1, boolean arg2, int arg3, int arg4) {
return null;
}
public void addCellEditorListener(CellEditorListener arg0) {
}
public void cancelCellEditing() {
}
public Object getCellEditorValue() {
return null;
}
public boolean isCellEditable(EventObject arg0) {
return false;
}
public void removeCellEditorListener(CellEditorListener arg0) {
}
public boolean shouldSelectCell(EventObject arg0) {
return false;
}
public boolean stopCellEditing() {
return false;
}
}

Matflasch
18-11-2004, 17:35
hmm keine antwort?

Soll ich mal ne Beispielanwendung erstellen und die quelltexte als zip zum download bereitstellen?

So 'kompliziert', wie es wegen dem ganzen quelltext aussieht, ist es eigentlich net ;)

Mfg, Matflasch

fs111
20-11-2004, 15:26
Was erwartest Du? Du kippst hier Pfundweise Quelltext ins Forum, und erwartest, dass sich da jmd. komplett einarbeitet? Das ist ein Forum wo man konkrete Fragen stellen soll, die dann auch beantwortet werden, sofern möglich, aber keins, wo die Leute an chronischer Langeweile leiden, und sich in Endlose Code-Listings einlesen...

fs111

Matflasch
22-11-2004, 10:36
Genau gesagt ist meine Frage, wie man Renderer und Editoren für die JTable bastelt, denn das klappt nicht, wie es klappen soll...

Generell sollte dies auch ein wenig als eine art 'tutorial' dienen... nur dass das mit den Renderern noch nicht hin haut....

Hab auch schon nen paar tutorials durchgearbeitet...aber die renderer haben ihren eigenen Kopf...

Konkrete Fragen sind z.B.:
- Muss ich z.B. eine JComboBox, die in eine JTable soll, füllen bevor die als Renderer/Editor definiert wird? Oder danach? Oder ist das egal?
- Ich nutze den Renderer nicht spaltenweise, sondern Zellenweise. Ich übergebe an die Zelle ein Objekt, welches den Text für die Zelle, sowie ToolTip, hintergrundfarbe etc beinhaltet. Wie kann ich den Renderer setzen für eine einzelne Zelle? Bei mir spinnt der Renderer dann immer...
- Geht es, dass man eine JTable hat und wenn man in ein Feld klickt, dass dann eine Art JTextArea auf nem JScrollpane 'rausklappt'? (Soll für das Eintragen von einem Songtext sein...)


Soweit erstmal...

danke!

Mfg, Matflasch