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
Annonceindlæg fra Barco
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; }