shaw
shaw

Reputation: 215

java: how to select only one cell in a jtable and not the whole row

in a jTable, I want when a user clicks on a cell, this sentence to be printed on the screen :

I am cell in row X and column Y

where x and Y are the row and column of the clicked cell. But what I am getting is : when I click for example the cell in row 1 and column 4 I get the following :

I am cell in row 1 and column 0
I am cell in row 1 and column 1
I am cell in row 1 and column 2
....
I am cell in row 1 and column N  ( N = number of columns)

i.e. the whole row is selected.

this is the code :

public class CustomTableCellRenderer extends DefaultTableCellRenderer{

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{

    Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

            if(isSelected) System.out.println("I am cell in row "+row+" and column "+column);



    return cell;

}

}

Thanks for any help.

Upvotes: 8

Views: 28803

Answers (5)

Guy Levin
Guy Levin

Reputation: 1258

myTable.setCellSelectionEnabled(true);

Upvotes: 2

BenCole
BenCole

Reputation: 2112

Change your if(isSelected) to if (isSelected && hasFocus). This will print for only the selected cell, rather than the selected row.

mKorbel's answer should also work...

Upvotes: 0

mKorbel
mKorbel

Reputation: 109813

myTable.setRowSelectionAllowed(false);

Upvotes: 9

JB Nizet
JB Nizet

Reputation: 691715

You shouldn't use a cell renderer for this.

Enable cell selection on your table (using setCellSelectionEnabled(true)), then get the selection model of the table (using getSelectionModel()), and add a listener on this selection model. Each time an event is triggered, use getSelectedRow() and getSelectedColumn() to know which cell is selected.

Note that this will give you the selected cell, which can be modified using the mouse or the keyboard. If you just want to know where the mouse clicked, then see KDM's answer.

Upvotes: 17

Dakshinamurthy Karra
Dakshinamurthy Karra

Reputation: 5463

CellRenderers are used for rendering the cell contents. If you want to find the cell in which the mouse clicked, use a MouseListener and in the mouseClicked method find the cell.

Upvotes: 1

Related Questions