在表中
int[] selectedRows;  
jTable.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent evt) {    }    public void mouseReleased(MouseEvent evt) {
        
    }
}//行选择完成后,拖动所选择的行
jTableSourceFile.addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseDragged(MouseEvent e) {
        //在 addMouseListener 按下及弹起中已得到selectedRows
        
        if(selectedRows!= null && selectedRows.length > 0)
        {
            jTableQualifyPage.clearSelection();
            for(int i = 0; i < selectedRows.length; i++)
            {
                jTableQualifyPage.addRowSelectionInterval(selectedRows[i],selectedRows[i]);
            }
        }
    }
}selectedRows里的行索引数据是正确的一个奇怪的问题:
    在工程中,有俩个界面用到了,一个表中拖动后界面显示是正确的,二另一个表中拖动后界面选择不正确呵呵!~怪怪的问题

解决方案 »

  1.   


            jTableSourceFile.addMouseListener(new MouseAdapter() {
                boolean contain = false;
                public void mousePressed(MouseEvent evt) {
                    contain = false;
                    if(evt.getButton() == MouseEvent.BUTTON3) 
                    {
                        Point p = evt.getPoint();
                        setSelectRow(p);            
                    }                               if(selectedPages == null || selectedPages.length <= 0)
                    {
                        selectedPages = jTableSourceFile.getSelectedRows();
                        return;
                    }
                    if (evt.getButton() == MouseEvent.BUTTON1) {
                        Point p = evt.getPoint();
                        int selectRow = jTableSourceFile.rowAtPoint(p);
                        int i=0;
                        for(; i<selectedPages.length; i++) {
                            if(selectRow == selectedPages[i]) {
                                contain = true;
                                break;
                            }
                        }
                        if(!contain) {
                            selectedPages = new int[]{selectRow};
                        }
                    }
                }
                
                public void mouseReleased(MouseEvent evt) {
                    if(evt.getButton() == MouseEvent.BUTTON1)
                    {
                        if(evt.isControlDown() || evt.isShiftDown())
                        {
                            selectedPages = jTableSourceFile.getSelectedRows();
                            return;
                        }
                        else if(!contain && selectedPages != null && jTableSourceFile.getSelectedRows().length > 0)
                        {
                            selectedPages = jTableSourceFile.getSelectedRows();
                        }
                    }                if(!contain && evt.getButton() == MouseEvent.BUTTON1 && !evt.isAltDown() && !evt.isControlDown() && !evt.isShiftDown())
                    {
                        jTableSourceFile.clearSelection();
                        jTableSourceFile.setRowSelectionInterval(selectedPages[0],selectedPages[0]);
                    }
                    
                    if(evt.isPopupTrigger())
                        mousePopupMenu(evt, 0);
                }
            });
            jTableSourceFile.addMouseMotionListener(new MouseMotionAdapter() {
                int count = 0;
                public void mouseDragged(MouseEvent e) {
                    if(count++ % 3 == 0) {
                        jTableSourceFile.clearSelection();
                        if(selectedPages != null && selectedPages.length > 0 
                                        && selectedPages.length <jTableSourceFile.getRowCount())
                        {
                            for(int i = 0; i < selectedPages.length; i++)
                            {
                                jTableSourceFile.addRowSelectionInterval(selectedPages[i],selectedPages[i]);
                            }
                        }
                    }
                }
            });
      

  2.   

    晕死,都什么逻辑啊表格拖拽设置一个TransferHandler就行了table.setDragEnabled(true);
    table.setTransferHandler(new TableTransferHandler());//自定义一个Handler
      

  3.   

    恩!~
    我试试你说的那样看看。我刚才深入看了下拖拽源的代码,确实没必要写那么。我刚刚工作没多久,参与这个项目时已经成规模了,但里面N多的bug
    swing方面很多的不懂。问下,你也是搞swing方面的吗?
      

  4.   

    几年之前是做Swing相关的,现在不是了 :)