从最后选择JTable行

Sen*_*rJD 5 java swing jtable jscrollpane

大家新年快乐!:)

我有一个JTable内部JScrollPane(fillsViewportHeighttrue),并希望在拖动开始在表外时从结尾启用行选择(如图中所示) 在此输入图像描述

SSCCE:

public class SimpleTableDemo extends JPanel {

    public SimpleTableDemo() {
        super(new BorderLayout(0, 0));

        String[] columnNames = { "First Name", "Last Name", "Sport", "# of Years", "Vegetarian" };

        Object[][] data = { { "Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false) }, { "John", "Doe", "Rowing", new Integer(3), new Boolean(true) }, { "Sue", "Black", "Knitting", new Integer(2), new Boolean(false) }, { "Jane", "White", "Speed reading", new Integer(20), new Boolean(true) }, { "Joe", "Brown", "Pool", new Integer(10), new Boolean(false) } };

        final JTable table = new JTable(data, columnNames);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);

        JScrollPane scrollPane = new JScrollPane(table);

        add(scrollPane, BorderLayout.CENTER);
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("SimpleTableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700, 400);

        SimpleTableDemo newContentPane = new SimpleTableDemo();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

UPD:

默认行为JTable是选择从开始所有行目前的一个,如果我开始选择下的最后一排.我想在我拖动鼠标的时候只选择鼠标下的那些行(正如我在图片中所示).

kle*_*tra 3

原料:

  • 检测 mousePressed 最后一行“下方”的 mouseListener
  • 如果是,则将行选择模型的锚点设置为最后一行

就像是:

MouseListener l = new MouseAdapter() {

    @Override
    public void mousePressed(MouseEvent e) {
        Rectangle lastRow = table.getCellRect(table.getRowCount() - 1, 0, false);
        if (e.getY() < lastRow.y + lastRow.height) return;
        System.out.println(table);
        table.getSelectionModel().setAnchorSelectionIndex(table.getRowCount()-1);
    }

};
table.addMouseListener(l);
Run Code Online (Sandbox Code Playgroud)