【问题标题】:How do I prevent a Java Swing JTable column from being sorted when the user click on the header?当用户单击标题时,如何防止对 Java Swing JTable 列进行排序?
【发布时间】:2013-01-16 18:48:03
【问题描述】:

我有一个有几列的 JTable。我想让 一些 列无法排序。我该怎么做?我一直在使用 Java 1.4,所以不能选择使用 TableRowSorter,因为它直到 1.6 才引入。

【问题讨论】:

  • 如果 JTable 自己可以排序,我相信你一定能搞清楚。
  • 你想只停止一列还是全部?

标签: java swing sorting jtable


【解决方案1】:

(例如,只有伪代码,所有内容都是硬编码的,必须覆盖来自 ColumnModel 的列)

if (column >= 0 && column < getModelWrapper().getColumnCount() 
    && isSortable(column)) {

if (column >= 0 && column <=1  /*getModelWrapper().getColumnCount()*/ 
    && isSortable(column)) {

public void toggleSortOrder(int column) {

那么第二列不可排序

  • 如果不能帮助您获得更好的帮助,请尽快发布 SSCCE 证明您的问题

【讨论】:

    【解决方案2】:
    【解决方案3】:

    如果您想对一些而不是其他进行排序,则必须实现一个侦听器。我用过这样的东西:

    table.getTableHeader().addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                int col= table.getTableHeader().columnAtPoint(e.getPoint());
                // column number col has been clicked -- sort if necessary,
                // discard the event if sorting is not desired.
                //
            }
    
        });
    

    注意可以拖放行的表格;您可以使用

    禁用此功能
    table.getTableHeader().setReorderingAllowed(false);
    

    【讨论】:

    • 这行不通,你只是添加额外的逻辑,但你不会阻止应用现有的鼠标侦听器和排序逻辑......测试如下: table.getTableHeader().addMouseListener(new MouseAdapter () { @Override public void mouseClicked(MouseEvent e) { return; } });
    • 是的,它不会阻止现有侦听器触发。但是,如果您使用的是 BasicTableHeaderUI(正如我所期望的那样),您可以将 ReorderingAllowed 设置为 false(如所示),它会起作用。
    猜你喜欢
    • 2019-10-01
    • 2012-08-09
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多