Hallo liebe Java-Community!
Mein erster Beitrag ist gleich eine Frage zum Thema "Wie bekomme ich einen JButton in eine Zelle von einem JTable". Nachdem ich mehrere Stunden mich mit dem Thema Cellrenderer befasst habe, stellt sich bei mir die Frage ob es auch möglich ist nur in eine einzige Zelle einen Button zu implementieren, der sich nach einmaligen drücken "auflöst" und einen String mit der aktuellen Uhrzeit hinterlässt, die ich zuvor in einem JLabel generieren lasse.
Das heißt der Benutzer soll die Möglichkeit haben den Button zu klicken, sodass in diese Zelle wo der Button sich befindet, sich danach die Uhrzeit befindet.
Ich habe dafür schon einige Überlegungen angestellt wie ich das programmieren könnte und habe folgende Quelltexte für euch:
*Buttonrenderer* erschafft einen Button in einer Tabelle, die übergegeben werden muss.
*ButtonEditor* gibt die Möglichkeit dem Button eine Funktion beim Klicken zuzuweisen
im Konstruktor der Main-Klasse:
Methode insertTime() in der MainClass:
Ich hoffe ich habe alles Nötige dazu gepostet und würde mich riesig freuen wenn mir dabei jemand weiterhelfen könnte. Falls Erklärungen noch fehlen sollten, reiche ich diese natürlich gerne nach, welches hoffentlich nicht der Fall sein sollte =).
Vielen Dank schon mal im Vorraus
Grüße Olli123
Mein erster Beitrag ist gleich eine Frage zum Thema "Wie bekomme ich einen JButton in eine Zelle von einem JTable". Nachdem ich mehrere Stunden mich mit dem Thema Cellrenderer befasst habe, stellt sich bei mir die Frage ob es auch möglich ist nur in eine einzige Zelle einen Button zu implementieren, der sich nach einmaligen drücken "auflöst" und einen String mit der aktuellen Uhrzeit hinterlässt, die ich zuvor in einem JLabel generieren lasse.
Das heißt der Benutzer soll die Möglichkeit haben den Button zu klicken, sodass in diese Zelle wo der Button sich befindet, sich danach die Uhrzeit befindet.
Ich habe dafür schon einige Überlegungen angestellt wie ich das programmieren könnte und habe folgende Quelltexte für euch:
*Buttonrenderer* erschafft einen Button in einer Tabelle, die übergegeben werden muss.
Java:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
/**
*
* @author Olli
*/
public class Buttonrenderer implements TableCellRenderer {
JButton button = new JButton();
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
button.setText(value.toString());
return button;
}
}
*ButtonEditor* gibt die Möglichkeit dem Button eine Funktion beim Klicken zuzuweisen
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.EventObject;
import javax.swing.*;
import javax.swing.table.*;
/**
*
* @author Olli
*/
public class ButtonEditor extends AbstractCellEditor implements TableCellEditor,
ActionListener {
JTable table;
JButton button = new JButton();
int clickCountToStart = 1;
public ButtonEditor(JTable table) {
this.table = table;
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
meineMainClass.insertTime();// hier steht dann die Methode zum Zeitübertragen in die Zelle
table.remove(button); // funktionniert nicht so wie ich es mir vorstelle xD
}
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row, int column) {
button.setText(value.toString());
return button;
}
public Object getCellEditorValue() {
return button.getText();
}
public boolean isCellEditable(EventObject anEvent) {
if(anEvent instanceof MouseEvent) {
return ((MouseEvent)anEvent).getClickCount() >= clickCountToStart;
}
return true;
}
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
public boolean stopCellEditing() {
return super.stopCellEditing();
}
public void cancelCellEditing() {
super.cancelCellEditing();
}
}
im Konstruktor der Main-Klasse:
Java:
buttonrenderer = new Buttonrenderer();
meineTabelle.getColumnModel().getColumn(7).setCellRenderer(buttonrenderer);
meineTabelle.getColumnModel().getColumn(7).setCellEditor(new ButtonEditor(meineTabelle));
Methode insertTime() in der MainClass:
Java:
meineTabelle.setValueAt(jLabel.getText(), currentRow, 7);
// jLabel generiert die Zeit und currentRow mit Column Platz "7" ist quasi der Vektor oder die Referenz auf die gewünschte Zelle
Ich hoffe ich habe alles Nötige dazu gepostet und würde mich riesig freuen wenn mir dabei jemand weiterhelfen könnte. Falls Erklärungen noch fehlen sollten, reiche ich diese natürlich gerne nach, welches hoffentlich nicht der Fall sein sollte =).
Vielen Dank schon mal im Vorraus
Grüße Olli123