Rudeboii ezuronye
Rudeboii ezuronye

Reputation: 73

table.getSelectedRow() is returning 0 by default instead of -1

so I've been trying to check if a row is selected before performing an action. When you implement the table.getSelectedRow(), it should return -1 if no row is selected. But mine is returning 0 by default Below is a little GUI just to demonstrate the issue. It runs fine

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

public class tester extends JFrame implements ActionListener{

private JTable table;
private int row;


public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                tester window = new tester();
                window.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public tester() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {

    setSize(600,400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().setLayout(null);



    // **SETTING OUT MY TABLE OF USERS**
    String[] columns1 = new String[] {
            "ID", "Name"
    };
    Object [][] data = {
            {"S145","PAPA"},
            {"S134","JAKE"},
            {"S324","MATTHEW"},
    };



    DefaultTableModel tm = new DefaultTableModel(data, columns1);
    table = new JTable(tm);
    table.setBorder(new EmptyBorder(0, 0, 0, 0));
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setBounds(0, 11, 574, 217);
    getContentPane().add(scrollPane);
    table.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent me) {
            row = table.getSelectedRow();
            System.out.println("User row is: "+row);


        }
    });

    System.out.println("User row is: "+row);
}

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

}

}

Upvotes: 0

Views: 540

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347334

No, it's not (returning 0)

Between here...

private int row;

and here (inside initialize and not your MouseListener)...

System.out.println("User row is: "+row);

you never change the row value, so it's still carrying it's default value, which is 0

If you change your code to something more like...

private void initialize() {
    //...
    table.addMouseListener(new MouseAdapter() {
        //...
    });

    row = table.getSelectedRow();
    System.out.println("User row is: " + row);
}

Then it will print -1

Upvotes: 2

Related Questions