Avatar billede banielsen Nybegynder
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
Avatar billede _carsten Nybegynder
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;
}
Avatar billede banielsen Nybegynder
25. september 2004 - 13:24 #2
kanont... det virker perfekt!! Tak for det:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester