Solved

Java Swing: JPanel

Posted on 2011-09-09
18
443 Views
Last Modified: 2012-08-13
I have a class A that extends JPanel and implements ListSelectionListener.
When the user clicks on a table cells, please let me know how I can determine the row number, and column number of the clicked cell.

I feel I must do this within the method valueChanged(ListSelectionEvent arg0), but not sure how to do it.

If possible, please provide some sample code.

Thanks!
0
Comment
Question by:dshrenik
  • 12
  • 6
18 Comments
 
LVL 47

Expert Comment

by:for_yan
ID: 36515080

ListSelectionListener is about list

list.getSelectedIndex() will return the index of selected item in the list
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515082
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515083
you may have several lists - and determine within the method which of the lists was clicked
- that would be analog of the column
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 47

Expert Comment

by:for_yan
ID: 36515086
this is about the JTable and List Selection Listener

http://www.exampledepot.com/egs/javax.swing.table/SelEvent.html
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515089

Yes, I was wrong initially - of course you can use for JTable, like in this code from above link:
SelectionListener listener = new SelectionListener(table);
table.getSelectionModel().addListSelectionListener(listener);
table.getColumnModel().getSelectionModel()
    .addListSelectionListener(listener);

public class SelectionListener implements ListSelectionListener {
    JTable table;

    // It is necessary to keep the table since it is not possible
    // to determine the table from the event's source
    SelectionListener(JTable table) {
        this.table = table;
    }
    public void valueChanged(ListSelectionEvent e) {
        // If cell selection is enabled, both row and column change events are fired
        if (e.getSource() == table.getSelectionModel()
              && table.getRowSelectionAllowed()) {
            // Column selection changed
            int first = e.getFirstIndex();
            int last = e.getLastIndex();
        } else if (e.getSource() == table.getColumnModel().getSelectionModel()
               && table.getColumnSelectionAllowed() ){
            // Row selection changed
            int first = e.getFirstIndex();
            int last = e.getLastIndex();
        }

        if (e.getValueIsAdjusting()) {
            // The mouse button has not yet been released
        }
    }
}

Open in new window

0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515096


check this - it shows simpler way to detemrnin which cell was clicked:
http://stackoverflow.com/questions/5044222/how-can-i-determine-which-cell-in-a-jtable-was-selected
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515101
These are two methods offered in the above link which use MouseListener - seems to be easier
than wit ListSelectionListemerr

jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
    @Override
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        int row = jTable1.rowAtPoint(evt.getPoint());
        int col = jTable1.columnAtPoint(evt.getPoint());
        if (row >= 0 && col >= 0) {
            ......

        }
    }
});

Open in new window


jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
       @Override
       public void mouseClicked(java.awt.event.MouseEvent evt) {
           ...
           int row = jTable1.getSelectedRow();
           int col = jTable1.getSelectedColumn());
           if (evt.getClickCount() > 1) { // double-click etc...
              ...

Open in new window



0
 

Author Comment

by:dshrenik
ID: 36515103
Can you tell me what exactly the above 2 methods are doing?
0
 

Author Comment

by:dshrenik
ID: 36515105
I mean, how are they different from each other?
0
 
LVL 47

Accepted Solution

by:
for_yan earned 500 total points
ID: 36515107

I'd use this one - it is the simplest - it determines
the point of clicking from the MouseEvent
and then using Jtable methods rowAtPoint(Point)
and columnAtPoint(Point)
very starightforwardly detemine the colmun and row number
of the point which was clicked.

jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
    @Override
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        int row = jTable1.rowAtPoint(evt.getPoint());
        int col = jTable1.columnAtPoint(evt.getPoint());
        if (row >= 0 && col >= 0) {
            ......

        }
    }
});

Open in new window

0
 

Author Comment

by:dshrenik
ID: 36515111
So where dies the above code go? In the constructor?
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515114
Yes, in the way they sjhow it - it goes into the constructor
0
 

Author Comment

by:dshrenik
ID: 36515115
Great. Thanks!
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515118
I don't like this anonymous classes
I would rather declare on top fo the class implements MouseListenere

then I'd say in constructo
jTbale1.addMouseListener(this);



and then in

public void mouseClicled(MouseEvent e){

if(e.getSource().equals(jTable1)){
 int row = jTable1.rowAtPoint(e.getPoint());
        int col = jTable1.columnAtPoint(e.getPoint());
        if (row >= 0 && col >= 0) {
            ......

        }

But most folks use anonymouis classes.


 
0
 

Author Comment

by:dshrenik
ID: 36515125
jTbale1.addMouseListener(this);

the above line of code is not working. It says the argument is not applicable.
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515132
Did you say at the top "implements MouseListener" ?
0
 

Author Comment

by:dshrenik
ID: 36515136
Oops! Thanks!
0
 
LVL 47

Expert Comment

by:for_yan
ID: 36515140
And you need to define all methods of MouseListener

just paste these:
 public void mousePressed(MouseEvent me){}

 public void mouseEntered(MouseEvent me){}

public void mouseExited(MouseEvent me){}

public void mouseReleased(MouseEvent me){}

and in this ione
put real code:

public void mouseClicked() {

///stuuff

}
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
tomcat administrtor 12 68
Tomcat: Unable to run tomcat service. 2 28
ejb entity bean example issue 2 25
Fast way to search item into Java Array (Rhino compatible) 2 36
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question