我正在尝试从jtable中选择整行。第一次,整个行都被选中,但是从下一次开始,尽管获得了整个行数据,但只有很少的单元格被选中。
代码:
jDelete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(!jtable.getSelectionModel().getValueIsAdjusting())
deleteRow(jtable.getSelectedRow());
}
});
jtable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if(!e.getValueIsAdjusting()){
jtable.setRowSelectionAllowed(true);
String[] arr = new String[9];
int row = jtable.getSelectedRow();
if(row!=-1){
for(int i=0;i<9;i++){
arr[i] = (String) jtable.getValueAt(row, i);
}
jId.setText(arr[0]);
jName.setText(arr[1]);
jTime.setSelectedItem(arr[2]);
jMail.setText(arr[3]);
jMobile.setText(arr[4]);
jCourse.setSelectedItem(arr[5]);
jFee.setText(arr[6]);
jPaid.setText(arr[7]);
jBalance.setText(arr[8]);
}
}
}
});
当我尝试选择该行并将其删除时,第一次将其正确删除。从下一次开始,当我单击一行时,显示为选中状态的单元格很少,但获得了整行。如何使其显示为所选的整个行?
第一次:正确选择了整个行。 [![在此处输入图片描述] [1]] [1]
第二次:整个行未完全选中。
[![在此处输入图片描述] [1]] [1]
整个代码发布在这里:
答案 0 :(得分:0)
jtable.setRowSelectionAllowed(true);
不要在选择侦听器中设置此属性。创建表时,这是默认行为。因此不需要上面的代码。
public void actionPerformed(ActionEvent e) {
if(!jtable.getSelectionModel().getValueIsAdjusting())
deleteRow(jtable.getSelectedRow());
为什么要在ActionListener中检查选择模型。不需要这样做。单击该按钮时,该行已经被选中。
但是代码应类似于:
int row = jtable.getSelectedRow();
if (row != -1)
deleteRow( row );
这将确保在尝试删除行之前已选中该行。