在JTable中没有选择整个行

时间:2018-07-04 04:06:31

标签: java swing jtable

我正在尝试从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]

整个代码发布在这里:

https://ideone.com/7EJiRQ

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 );

这将确保在尝试删除行之前已选中该行。