【问题标题】:JTable row selection from the endJTable 行尾选择
【发布时间】:2014-01-02 11:46:00
【问题描述】:

祝大家新年快乐! :)

我在JScrollPane 内有一个JTablefillsViewportHeighttrue)并且希望在表格外部开始拖动时从末尾启用行选择(如图所示)

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

我该怎么做?

UPD:

JTable默认行为是选择从开始到当前行的所有行,如果我开始选择低于最后一行。 我想在我向上拖动鼠标时只选择鼠标下方的行(如图所示)。

【问题讨论】:

  • 设置ListSelectionModel.SINGLE_INTERVAL_SELECTION会发生什么,默认为MULTIPLE_INTERVAL_SELECTION
  • 1.你必须使用 SINGLE_...,2. 你想从一个选定的行中选择所有行到 JTables 视图末尾的问题(在这种情况下,是否排序或过滤无关紧要,选择仅与 JTables 视图有关),例如然后选择第一行以选择JTable中的所有行,这是真的??? 3.你想把这个选择存储在SelectionModel中
  • @mKorbel 1. 我说,它没有任何改变; 2. 对不起,我不明白你的意思; 3. 是的,当然。
  • @trashgod 谢谢,但这不是我的意思

标签: java swing jtable jscrollpane


【解决方案1】:

成分:

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

类似:

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

【讨论】:

  • 谢谢你...但你能解释一下为什么它有效吗?
  • @SeniorJD 不明白您想要解释的内容 - 没有比 api 文档更好的了...提示,提示 ;-)
猜你喜欢
  • 2018-10-30
  • 2023-03-24
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多