在 jTable 中移动一行

发布于 2024-08-06 20:58:03 字数 141 浏览 6 评论 0原文

如何在 jTable 中移动一行,以便 row1 转到 row2 的位置,而 row2 转到 < strong>row1的位置?

How can one move a row in jTable so that row1 goes to row2's position and row2 goes to row1's position ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

岁月打碎记忆 2024-08-13 20:58:03

使用 DefaultTableModelmoveRow(...) 方法。

或者,如果您不使用 DefaultTableModel,则在自定义模型中实现类似的方法。

Use the moveRow(...) method of the DefaultTableModel.

Or, if you aren't using the DefaultTableModel then implement a simliar method in your custom model.

杀手六號 2024-08-13 20:58:03

这是我刚刚使用这个问题的答案开发的代码。
使用这些函数,您可以一次选择多行并在 JTable 中向下或向上移动它们。我已将这些函数附加到 JButton,但我将它们清除以使其更具可读性。

这两个方法的最后一个代码行 (setRowSelectionInterval()) 用于跟踪正在移动的行上的选择,因为 moveRow() 不会移动选择,而是移动行该行的内容。

public void moveUpwards()
{
    moveRowBy(-1);
}

public void moveDownwards()
{
    moveRowBy(1);
}

private void moveRowBy(int by)
{
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    int[] rows = table.getSelectedRows();
    int destination = rows[0] + by;
    int rowCount = model.getRowCount();

    if (destination < 0 || destination >= rowCount)
    {
        return;
    }

    model.moveRow(rows[0], rows[rows.length - 1], destination);
    table.setRowSelectionInterval(rows[0] + by, rows[rows.length - 1] + by);
}

Here is my code that I've just developed using the answer in this question.
With those function you can select multiple rows at a time and move them down or up in a JTable. I've attached those function to JButton, but i clean them out to make them more readable.

The last code line of both method (setRowSelectionInterval()) is used to follow the selection on the row being moved, since moveRow() doesn't move the selection but the content of the row.

public void moveUpwards()
{
    moveRowBy(-1);
}

public void moveDownwards()
{
    moveRowBy(1);
}

private void moveRowBy(int by)
{
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    int[] rows = table.getSelectedRows();
    int destination = rows[0] + by;
    int rowCount = model.getRowCount();

    if (destination < 0 || destination >= rowCount)
    {
        return;
    }

    model.moveRow(rows[0], rows[rows.length - 1], destination);
    table.setRowSelectionInterval(rows[0] + by, rows[rows.length - 1] + by);
}
合久必婚 2024-08-13 20:58:03
TableModel model = jTable.getModel();
for(int col=0; col<model.getColumnCount(); col++) {
  Object o1 = model.getValueAt(row1, col);
  Object o2 = model.getValueAt(row2, col);
  model.setValueAt(o1, row2, col);
  model.setValueAt(o2, row1, col);
}
TableModel model = jTable.getModel();
for(int col=0; col<model.getColumnCount(); col++) {
  Object o1 = model.getValueAt(row1, col);
  Object o2 = model.getValueAt(row2, col);
  model.setValueAt(o1, row2, col);
  model.setValueAt(o2, row1, col);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文