2017-04-19 249 views
0

所以我一直试图在执行动作之前检查是否选择了一行。当你实现table.getSelectedRow()时,如果没有选择行,它应该返回-1。但默认返回0 下面是一个小图形用户界面来证明这个问题。它运行良好table.getSelectedRow()默认返回0,而不是-1

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 

} 

}

回答

2

不,它不是(返回0

之间。这里...

private int row; 

和这里(内initialize,而不是你的MouseListener)。 ..

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

你永远不变的row价值,所以它仍然承载它的默认值,如果你改变你的代码的东西更像是0

...

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

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

然后将打印-1

+0

哦当然是。非常感谢 –