Hallo an alle,
ich versuche mich schon einige Zeit in einer Spalte meiner Tabelle Buttons darzustellen.
Die Anleitungen im Netz helfen mir nicht weiter, weil ich nicht von den Beispielen auf meinen Fall schließen kann.
Meine Situation:
Netbeans hat mir folgenden Code gezaubert:
Die Tabelle hat erst mal nur eine Zeile, weil ich beim Programmstart noch nicht weiß, wieviele ich tatsächlich benötige. Nachdem ich die Zeilenzahl bestimmt habe (ca. 15000-20000), bügel ich eine entsprechend große Tabelle über die alte drüber.
Hier ist der Sourcecode:
Meine Fragen:
Wie kann ich in der Spalte 11 Buttons anzeigen lassen, mit den ich eine Aktion auslösen kann?
Wo muss ich welchen Programmcode hinschreiben? - Bei dem Code der Tabelle oder in eine eigene Methode? (Bitte etwas ausführlicher erklären, damit ich es verstehe)
Die Angaben im Block ...
... werden irgendwie ignoriert. Egal ob man " java.lang.String.class" hinschreibt, es kommt immer Object raus. Dadurch sind alle Datenabrufe mit einem .toString zu behandeln. Was kann ich dagegen machen?
Wieviel Taktzyklen kostet die Wandlung Objekt zu String? (Vielleicht lohnt sich der Aufwand gar nicht)
Ich wäre für ein paar Hinweise dankbar.
Bitte beachtet! Links brauche ich eigentlich nicht, die habe ich schon alle alleine gefunden. :noe:
Davon habe ich den am interessantesten gefunden (und trotzdem nicht verstanden):
Java CodeGuru: (none)
Den folgenden Hinweis zu einem Problem in einem anderen Forum habe ich auch (erfolglos) versucht umzusetzen:
" [...] ein eigenes TableModel implementieren und dort für die entsprechenden Zellen in der Methode:
public Class getColumnClass(int col)
JButton.class zurückgeben.
[...] implementierst javax.swing.table.TableModel oder du erweiterst das DefaultTableModel und überschreibst dort die o.g. Methode." [
Andreas
ich versuche mich schon einige Zeit in einer Spalte meiner Tabelle Buttons darzustellen.
Die Anleitungen im Netz helfen mir nicht weiter, weil ich nicht von den Beispielen auf meinen Fall schließen kann.
Meine Situation:
Netbeans hat mir folgenden Code gezaubert:
Java:
Datentabelle1.setAutoCreateRowSorter(true);
Datentabelle1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null, null, null, null, null, null, null}
},
new String [] {
"Lfd.Nr.", "Pfad", "Künstler", "Album", "Titel", "Nr.", "Update", "Qualität", "CD", "Bild", "Genre", "Temp"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.String.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.String.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
Datentabelle1.setAlignmentX(1.0F);
Datentabelle1.setAlignmentY(1.0F);
Datentabelle1.setName("Datentabelle1"); // NOI18N
Datentabelle1.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
Datentabelle1FocusGained(evt);
}
public void focusLost(java.awt.event.FocusEvent evt) {
Datentabelle1FocusLost(evt);
}
});
Datentabelle1.addInputMethodListener(new java.awt.event.InputMethodListener() {
public void caretPositionChanged(java.awt.event.InputMethodEvent evt) {
Datentabelle1CaretPositionChanged(evt);
}
public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) {
Datentabelle1InputMethodTextChanged(evt);
}
});
Datentabelle1.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
Datentabelle1PropertyChange(evt);
}
});
jScrollPane2.setViewportView(Datentabelle1);
Datentabelle1.getColumnModel().getColumn(0).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(0).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(0).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title0")); // NOI18N
Datentabelle1.getColumnModel().getColumn(1).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title1")); // NOI18N
Datentabelle1.getColumnModel().getColumn(2).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title2")); // NOI18N
Datentabelle1.getColumnModel().getColumn(3).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title3")); // NOI18N
Datentabelle1.getColumnModel().getColumn(4).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title4")); // NOI18N
Datentabelle1.getColumnModel().getColumn(5).setMinWidth(60);
Datentabelle1.getColumnModel().getColumn(5).setPreferredWidth(62);
Datentabelle1.getColumnModel().getColumn(5).setMaxWidth(64);
Datentabelle1.getColumnModel().getColumn(5).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title5")); // NOI18N
Datentabelle1.getColumnModel().getColumn(6).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(6).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(6).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(6).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title6")); // NOI18N
Datentabelle1.getColumnModel().getColumn(7).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(7).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(7).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(7).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title7")); // NOI18N
Datentabelle1.getColumnModel().getColumn(8).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(8).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(8).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(8).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title8")); // NOI18N
Datentabelle1.getColumnModel().getColumn(9).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(9).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(9).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(9).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title9")); // NOI18N
Datentabelle1.getColumnModel().getColumn(10).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(10).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(10).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(10).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title10")); // NOI18N
Datentabelle1.getColumnModel().getColumn(11).setHeaderValue(resourceMap.getString("Datentabelle1.columnModel.title11")); // NOI18N
Die Tabelle hat erst mal nur eine Zeile, weil ich beim Programmstart noch nicht weiß, wieviele ich tatsächlich benötige. Nachdem ich die Zeilenzahl bestimmt habe (ca. 15000-20000), bügel ich eine entsprechend große Tabelle über die alte drüber.
Hier ist der Sourcecode:
Java:
private void zeichneTabelle() {
// Spalten der alten Tabelle zählen
int lastColOld = Datentabelle1.getColumnCount();
int lastRowNew = anzahl_dateien;
// Neue Tabelle erstellen
Object o[][] = new Object[lastRowNew][lastColOld];
//set the tables new model with “o” as the first parameter - o is the new object
Datentabelle1.setModel(new javax.swing.table.DefaultTableModel(o, new Object [] {
"Lfd.Nr.", "Pfad lang", "Künstler", "Album", "Titel", "Nr.", "Update", "Qualität", "CD", "Bild", "Genre", "Pfad kurz"
})
{
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.String.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.Boolean.class, javax.swing.JButton.class
};
boolean[] canEdit = new boolean [] {
false, true, false, false, true, true, true, true, true, true, true, true, true
};
@Override
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
//return getValueAt(0, columnIndex).getClass();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
Datentabelle1.getColumnModel().getColumn(0).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(0).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(0).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(5).setMinWidth(60);
Datentabelle1.getColumnModel().getColumn(5).setPreferredWidth(62);
Datentabelle1.getColumnModel().getColumn(5).setMaxWidth(64);
Datentabelle1.getColumnModel().getColumn(6).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(6).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(6).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(7).setMinWidth(60);
Datentabelle1.getColumnModel().getColumn(7).setPreferredWidth(62);
Datentabelle1.getColumnModel().getColumn(7).setMaxWidth(64);
Datentabelle1.getColumnModel().getColumn(8).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(8).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(8).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(9).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(9).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(9).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(10).setMinWidth(50);
Datentabelle1.getColumnModel().getColumn(10).setPreferredWidth(52);
Datentabelle1.getColumnModel().getColumn(10).setMaxWidth(54);
Datentabelle1.getColumnModel().getColumn(11).setPreferredWidth(6);
}
Meine Fragen:
Wie kann ich in der Spalte 11 Buttons anzeigen lassen, mit den ich eine Aktion auslösen kann?
Wo muss ich welchen Programmcode hinschreiben? - Bei dem Code der Tabelle oder in eine eigene Methode? (Bitte etwas ausführlicher erklären, damit ich es verstehe)
Die Angaben im Block ...
Java:
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.String.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.Boolean.class, javax.swing.JButton.class
... werden irgendwie ignoriert. Egal ob man " java.lang.String.class" hinschreibt, es kommt immer Object raus. Dadurch sind alle Datenabrufe mit einem .toString zu behandeln. Was kann ich dagegen machen?
Wieviel Taktzyklen kostet die Wandlung Objekt zu String? (Vielleicht lohnt sich der Aufwand gar nicht)
Ich wäre für ein paar Hinweise dankbar.
Bitte beachtet! Links brauche ich eigentlich nicht, die habe ich schon alle alleine gefunden. :noe:
Davon habe ich den am interessantesten gefunden (und trotzdem nicht verstanden):
Java CodeGuru: (none)
Den folgenden Hinweis zu einem Problem in einem anderen Forum habe ich auch (erfolglos) versucht umzusetzen:
" [...] ein eigenes TableModel implementieren und dort für die entsprechenden Zellen in der Methode:
public Class getColumnClass(int col)
JButton.class zurückgeben.
[...] implementierst javax.swing.table.TableModel oder du erweiterst das DefaultTableModel und überschreibst dort die o.g. Methode." [
Andreas