Solved

Java Swing: JPanel

Posted on 2011-09-09
18
451 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Technology Partners: 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

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

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

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
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 third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…

690 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