当前位置: 首页 > 面试题库 >

JTable基于隐藏列的排序

毋城
2023-03-14
问题内容

我想JTable基于一个隐藏列对行进行排序。

说我有一个像这样的JTable

column1   column2
val1       val2

现在,我还有一个隐藏的column3,但我不想显示。当用户单击Column2时,应基于Column3(隐藏列)而不是基于Column2对行进行排序。

如何在JTable中实现呢?


问题答案:

您可以默认将TableRowSorter添加到JTable中,但是有RowSorter,没有什么比Darryl的Multisort
Table Header Cell
Renderer

更好,更清晰了

note注意RowSorter的定义仅对具体的TableColumn有效

简单示例(再次使用无用的爆炸)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class HeaderDoubleclickTest {

    private String[] columnNames = {"String", "Integer", "Boolean"};
    private Object[][] data = {
        {"aaa", 12, true}, {"bbb", 5, false},
        {"CCC", 92, true}, {"DDD", 0, false}
    };
    private TableModel model = new DefaultTableModel(data, columnNames) {

        private static final long serialVersionUID = 1L;

        @Override
        public Class<?> getColumnClass(int column) {
            return getValueAt(0, column).getClass();
        }
    };
    private JTable table = new JTable(model);
    private JTableHeader header;

    static class TestTableRowSorter extends TableRowSorter<TableModel> {

        TestTableRowSorter(TableModel m) {
            super(m);
        }

        @Override
        public void toggleSortOrder(int column) {
        }

        public void wrapToggleSortOrder(int column) {
            super.toggleSortOrder(column);
        }
    }
    private Timer timer = new Timer(400, new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("single");
            JTable table = header.getTable();
            RowSorter sorter;
            if (pt != null && table != null && (sorter = table.getRowSorter()) != null) {
                int columnIndex = header.columnAtPoint(pt);
                if (columnIndex != -1) {
                    columnIndex = table.convertColumnIndexToModel(columnIndex);
                    ((TestTableRowSorter) sorter).wrapToggleSortOrder(columnIndex);
                }
            }
        }
    });
    private Point pt;

    public JComponent makeUI() {
        timer.setRepeats(false);
        table.setRowSorter(new TestTableRowSorter(model));
        header = table.getTableHeader();
        header.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(final MouseEvent e) {
                if (timer.isRunning() && !e.isConsumed() && e.getClickCount() > 1) {
                    System.out.println("double");
                    pt = null;
                    timer.stop();
                } else {
                    pt = e.getPoint();
                    timer.restart();
                }
            }
        });
        JPanel p = new JPanel(new BorderLayout());
        p.add(new JScrollPane(table));
        return p;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    public static void createAndShowGUI() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().add(new HeaderDoubleclickTest().makeUI());
        f.setSize(320, 240);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}


 类似资料:
  • 因此,我试图编写一个油腻的脚本,并希望基于同一树中的span值来切换一个特定的div类。这将绑定到一个按钮操作。 我想出的最好的办法是... $('span[data-doc=“true”]').parent().parent().parent().parent().parent().parent().parent().parent().toggle(); 为了向上到达树并隐藏我想要的div类,我

  • 问题内容: 可以说我有这样的表: 我想得到的是这样的表: 发生的第一件事是基于column进行排序。 发生的第二件事是基于列的,但仅基于列中具有相同数字的行 在不使用任何数据库引擎的情况下应该如何解决此问题? 问题答案: 通常,通常使用where 是包含所有三个值的类型(例如,“ foo”,第一行的5、0)来执行此操作。 然后,您将编写一个比较在中呈现给它的两个对象的Int1值的,如果给出了明确的

  • 本文向大家介绍关于Layui Table隐藏列问题,包括了关于Layui Table隐藏列问题的使用技巧和注意事项,需要的朋友参考一下 layui没有提供Table隐藏列的功能(只是写这个文档的时候没有提供)。 第一步:获取Layui的TableBox Jquery对象 this._table_elem 是指的Table标签的ID layui-table-box 是layui的类名 第二步:将需要

  • 问题内容: 我正在尝试隐藏JTable的网格线,但没有结果。即使尝试更改网格线的颜色也不起作用。这是我的代码: 始终绘制白色网格线。我被困在这里… 我是否必须实现自定义视口才能摆脱这种情况? 预先感谢,亚历克斯 问题答案: 你必须设置两个东西 禁用网格显示 零行/列小区间间距 在代码中: 或使用JXTable(来自SwingX项目)为您执行此操作:

  • 我有以下问题: 我想有条件地显示datatable中的一列。特别是kt数据表中的actions列。(Laravel的Metronic主题有自己的Datatables实现,它基于jQuery Datatables。)我一直在看专栏。渲染方法,但我不能完全理解它。理想情况下,我希望根据与datatable的html一起传递的数据属性显示一列。 HTML: js/jquery: 我真的很感激你的帮助。

  • 按降序排序的LinkedHashSet的输出。 对不起,如果这是混淆,我不知道如何去排序像这样。