2016-06-17 1 views
1

J'ai ici un code que j'ai trouvé dans le stackoverflow qui permet à la table d'avoir un éditeur de cellule personnalisé comme JTextField.TableCellEditor: efface le texte d'origine si vous appuyez sur la touche; conserver la valeur si aucune entrée n'a été donnée

J'ai lu certains des articles sur l'éditeur de cellules et je comprends le comportement de chaque méthode abstraite.

class tableText extends AbstractCellEditor implements TableCellEditor { 
JComponent component = new JTextField(); 

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,int rowIndex, int vColIndex) { 
    ((JTextField) component).setText((String) value); 
    return component; 
} 

public Object getCellEditorValue() { 
    return ((JTextField) component).getText(); 
} 

}

Ce code m'a permis d'ajouter un JTextField quand je veux modifier une cellule dans ma table mais je suis à la recherche d'ajouter un code à elle, mais je ne suis pas exactement où les mettre.

Le comportement que je voulais ajouter était le suivant:

Lorsque la cellule est cliqué et le JTextField apparaît, si l'utilisateur appuie sur une touche numérique, il remplacera l'ancienne valeur par une nouvelle.

Si la valeur de la cellule est restée vide, la valeur d'origine sera conservée.

Je sais comment faire ces codes, mais je ne sais pas où les mettre.

Quelqu'un peut-il me guider à ce sujet?

+0

S'il vous plaît citer l'exemple de code mentionné. – trashgod

Répondre

1
  1. Si l'utilisateur appuie sur une touche numérique, il remplacera l'ancienne valeur par une nouvelle.

    Comme le montre here, vous devez utiliser un DefaultCellEditor avec un JTextField pour votre éditeur de cellules. Remplacez la méthode editCellAt() de la table et sélectionnez le texte de l'éditeur pour que l'ancienne valeur soit remplacée immédiatement au fur et à mesure que l'utilisateur tape.

    final Component editor = getEditorComponent(); 
    … 
    ((JTextComponent) editor).selectAll(); 
    

    Si nécessaire, ajoutez un DocumentListener pour examiner les frappes de touches individuelles ou d'un DocumentFilter pour appliquer l'entrée numérique.

  2. Si la valeur de la cellule est restée vide, la valeur d'origine sera conservée.

    Appuyez sur la échapper pour annuler l'édition et de restaurer la valeur d'origine.

image

+1

Il m'a fallu beaucoup de temps pour apprendre 'TableCellEditor' et' TableCellRenderer'. ils étaient comme la langue étrangère à moi à l'époque, mais maintenant, il est tout à fait logique! –