Java ListSelectionListener无法正常工作
这是我的密码。 当你从左到右选择时,它出现了问题Java ListSelectionListener无法正常工作,java,swing,jtable,actionlistener,Java,Swing,Jtable,Actionlistener,这是我的密码。 当你从左到右选择时,它出现了问题 import javax.swing.*; import javax.swing.event.*; public class swingex7 extends JFrame{ swingex7(){ JFrame f = new JFrame("Table Example"); String row[][]= {{"101","Hein Htet"
import javax.swing.*;
import javax.swing.event.*;
public class swingex7 extends JFrame{
swingex7(){
JFrame f = new JFrame("Table Example");
String row[][]= {{"101","Hein Htet","10000000"},{"102","Hein Htet1","20000000"},{"103","Hein
Htet2","30000000"}};
String column[]= {"Id","Name","Salary"};
final JTable jt = new JTable(row,column);
jt.setCellSelectionEnabled(true);
ListSelectionModel lsm = jt.getSelectionModel();
lsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
lsm.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
String data=null;
int[] rows=jt.getSelectedRows();
int[] columns = jt.getSelectedColumns();
for(int i=0;i<rows.length;i++) {
for(int j=0;j<columns.length;j++) {
data = (String)jt.getValueAt(rows[i], columns[j]);
}
}
System.out.println("Table element seleted is "+data);
}
});
JScrollPane js = new JScrollPane(jt);
f.add(js);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400, 400);
f.setVisible(true);
}
public static void main (String[]args) {
new swingex7();
}
}
当你从左向右选择时,它出现了问题。
我还希望每个操作只输出一次。代码中有两个问题 一,。 第一个问题是ListSelectionListener在单击鼠标和释放鼠标时被调用两次。但如果您可以将MouseListener添加到JTable中,则可以如下所示
MouseListener tableMouseListener = new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
String data = null;
int[] rows = jt.getSelectedRows();
int[] columns = jt.getSelectedColumns();
for (int i = 0; i < rows.length; i++) {
for (int j = 0; j < columns.length; j++) {
data = (String) jt.getValueAt(rows[i], columns[j]);
System.out.println("Table element selected is " + data);
}
}
}
};
jt.addMouseListener(tableMouseListener);
二,。
第二个问题是打印数据的位置。它应该在for循环中。否则,数据将在循环的每次迭代中重写,并且只打印最后一个值
for (int i = 0; i < rows.length; i++) {
for (int j = 0; j < columns.length; j++) {
data = (String) jt.getValueAt(rows[i], columns[j]);
System.out.println("Table element selected is " + data);
}
}
你得到的错误是什么?@Sujay Mohan运行时,尝试从左上角到右上角选择它-即使我选择了它,它也不会正常工作,有时也不会返回输出。我希望每个动作只有一个输出。我发现了问题。我现在就发布。定义您期望的输出。如果从ID列开始并拖动到Salary列,会怎么样?如果从“名称”列开始怎么办?如果从ID列的第一行开始,然后向下拖动到第三行,会怎么样。详细解释你的要求!不知何故,它解决了我的问题,但我想将它与ListSeletionLister一起使用