2010-08-16 5 views
2

Quelqu'un at-il un bon exemple de comment ajouter/supprimer des lignes d'un JTable en utilisant un modèle de table personnalisé? Le problème que je semble avoir est de savoir comment maintenir la mise à jour de la table lorsque j'ajoute ou supprime des éléments.JTable ajouter/supprimer des lignes au modèle de table personnalisé (mise à jour de l'affichage de la table)

La vraie idée simple ici est d'avoir un bouton ajouter et supprimer au-dessus de ma table qui permet à l'utilisateur à la volée de changer la table.

+1

Est-ce que "modèle de table personnalisé" signifie "étend DefaultTableModel" ou "extends AbstractTableModel"? – trashgod

Répondre

4

est ici par exemple pour ajouter la ligne:

import java.awt.BorderLayout; 
import java.awt.Point; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 
import java.util.Vector; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.JViewport; 
import javax.swing.SwingUtilities; 
import javax.swing.table.AbstractTableModel; 

public class RowAdder extends JFrame { 

    final SimpleModel tableData = new SimpleModel(); 
    JTable table = new JTable(tableData); 

    public static void main(String[] args) { 
    RowAdder ra = new RowAdder(); 
    ra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    ra.setSize(400, 300); 
    ra.setVisible(true); 
    } 

    public RowAdder() { 
    final JTextField textField = new JTextField(); 
    setLayout(new BorderLayout()); 
    add(new JScrollPane(table), BorderLayout.CENTER); 
    textField.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent event) { 
     tableData.addText(textField.getText()); 
     textField.setText(""); 
     } 
    }); 
    add(textField, BorderLayout.SOUTH); 
    } 

} 
class SimpleModel extends AbstractTableModel { 

    Vector textData = new Vector(); 

    public void addText(String text) { 
    textData.addElement(text); 
    fireTableDataChanged(); 
    } 

    public int getRowCount() { 
    return textData.size(); 
    } 

    public int getColumnCount() { 
    return 3; 
    } 

    public Object getValueAt(int row, int column) { 
    return textData.elementAt(row); 
    } 

} 

ci-dessus ref de: http://www.java2s.com/Tutorial/Java/0240__Swing/AddrowstoaTable.htm

Commander ce tutoriel sur JTable:

http://download.oracle.com/javase/tutorial/uiswing/components/table.html

Plus précisément pour le modèle de table vérification:

http://download.oracle.com/javase/tutorial/uiswing/components/table.html#data

Je pense que ce tutoriel devrait répondre à toutes vos questions.

0

Vous devez notifier l'objet JTable sur les modifications du modèle de table sous-jacent. La table n'observe pas le modèle mais attend des événements.

Après chaque modification (ou ensemble de modifications), créez un TableModelEvent et appelez la méthode tableChanged des tables.