23. september 2004 - 08:55
Der er
1 kommentar og
1 løsning
KeyListener på celle i Jtable
Hej
Jeg sidder og forsøger at lave en keyListener på hver enkelt celle i en kollonne i en Jtable. Men jeg kan ikke få det til at virke. Jeg har forsøgt at lade hver celle være et tekstfelt - men stadig uden held.
KeyListener skal virke på fuldstændig samme måde som ved et tekstfelt. Altså f.eks. hvis jeg skriver '5' i cellen skal der i samme sekund ske en opdatering i cellen ved siden af så der og står '5' i denne. Så snart jeg så skriver '50' skal i samme sekund ske en opdatering så der står '50' i cellen ved siden af
24. september 2004 - 22:37
#1
Her er et eksempel på hvordan du kan gøre det med din egen cellEditor
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class Test extends JFrame {
public Test() {
initComponents();
}
private void initComponents() {
table = new javax.swing.JTable();
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
table.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
focus(evt);
}
});
getContentPane().add(table, java.awt.BorderLayout.CENTER);
TableColumn col;
for( int i = 0; i < 4; i++){
col = table.getColumnModel().getColumn(1);
col.setCellEditor(new MyCellEditor());
}
pack();
}
// Flytter focus til cellens editor
private void focus(java.awt.event.KeyEvent evt) {
table.transferFocus();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Test().show();
}
private JTable table;
}
// Tabellens editor som addes til kolonne 2
// Sætter teksten i kolonne 3 = kolonne 2
public class MyCellEditor extends JTextField implements TableCellEditor{
public MyCellEditor() {
addKeyListener(new java.awt.event.KeyAdapter(){
public void keyReleased(java.awt.event.KeyEvent e){
table.setValueAt(getText() ,table.getSelectedRow(), 2);
}
});
}
public void addCellEditorListener(javax.swing.event.CellEditorListener l) {
}
public void cancelCellEditing() {
table.editingCanceled(new javax.swing.event.ChangeEvent(this));
}
public Object getCellEditorValue() {
return getText();
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
this.table = table;
setText(value != null ? value.toString() : "");
return this;
}
public boolean isCellEditable(java.util.EventObject anEvent) {
return true;
}
public void removeCellEditorListener(javax.swing.event.CellEditorListener l) {
}
public boolean shouldSelectCell(java.util.EventObject anEvent) {
return true;
}
public boolean stopCellEditing() {
table.editingStopped(new javax.swing.event.ChangeEvent(this));
return true;
}
private JTable table;
}