3 votes

Java jtable permet la sélection des lignes

J'essaie de créer un tableau qui affiche une liste d'utilisateurs. Le tableau doit permettre aux utilisateurs de sélectionner une ligne entière mais ne doit pas permettre l'édition des cellules.

Jusqu'à présent, j'ai réussi à empêcher les utilisateurs de modifier les cellules, mais comment leur permettre de sélectionner les lignes au lieu des cellules ?

DefaultTableModel userTableModel = new DefaultTableModel(new Object[]{"Customer ID", "First Name", "Last Name"}, 0) {
    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }
};

Et ceci montre que j'alimente le tableau :

public void refreshCustomersList() throws SQLException, ClassNotFoundException {

    UserBeanList userList = dbConnector.getUserData();

    for (int i = 0; i < userList.size(); i++) {
        UserBean userBean = userList.getUserBeanAt(i);

        String[] data = new String[3];

        data[0] = userBean.getCustomerID();
        data[1] = userBean.getFirstName();
        data[2] = userBean.getLastName();

        userTableModel.addRow(data);

    }
    tableCustomers.setModel(userTableModel);
}

Comme je l'ai dit, j'ai désactivé l'édition des cellules, mais comment faire pour n'autoriser que la sélection des lignes.

J'ai vu des messages d'autres personnes disant que je devrais mettre ceci, mais je ne sais pas trop où le mettre.

selectionTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Toute aide serait la bienvenue.

7voto

JustDanyul Points 6108

Avez-vous essayé setRowSelectionAllowed(true) sur votre instance de JTable ?

Je suggérerais d'essayer de regarder les javadocs http://docs.oracle.com/javase/6/docs/api/javax/swing/JTable.html#setRowSelectionAllowed(booléen)

et lisez le tutoriel lié aux javadocs : http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

Ils sont très minutieux :)

0voto

Java Man Points 983
private void jTable1MousePressed(java.awt.event.MouseEvent evt) {                                     

int selectedRow;

ListSelectionModel rowSM = jTable1.getSelectionModel();

  rowSM.addListSelectionListener(new ListSelectionListener()
  {
    @Override
    public void valueChanged(ListSelectionEvent e) 
    {
        ListSelectionModel lsm = (ListSelectionModel) e.getSource();

        selectedRow = lsm.getMinSelectionIndex();

        int numCols = jTable1.getColumnCount();

        model = (DefaultTableModel) jTable1.getModel();

        System.out.print(" \n row " + selectedRow + ":");

        for (int j = 0; j < numCols; j++) 
        {
            System.out.print(" " + model.getValueAt(selectedRow, j));
        }

    }
});
}

Vous pouvez ainsi obtenir la valeur de toute la ligne lorsque vous cliquez sur une ligne particulière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X