标签: tablerowsorter

Java - JTable - 如何获取已排序的列和排序方向?

有什么方法可以让 JTable 的哪一列被排序,什么是排序方向?

谢谢。

java sorting swing jtable tablerowsorter

3
推荐指数
1
解决办法
6039
查看次数

找不到ArrayIndexOutOfBoundsException:6> 1意味着什么?在排序jtable时

我在jtable排序机制中找不到问题,当我在搜索代码中实现排序时,它给出了数组索引超出范围,填充表代码在初始阶段工作正常,但在搜索发生后它也被卡住了.

我的应用程序有一个文本字段区域,它接受从数据库搜索的关键字.现在搜索后,它会在jtable上显示它,我想为它提供表格分类器.任何帮助表示赞赏.thks.我还提供了下面的堆栈跟踪.

//问题代码

// for searching data from data base and display it in table
// according to the keyword typed.

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       

    System.out.println(evt.getKeyCode());

    if(evt.getKeyCode() == KeyEvent.VK_ENTER){
    jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null}
            },
            new String [] {
                "cust_ID", "Title 2", "Title 3"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
    jTable1.removeColumn(jTable1.getColumnModel().getColumn(0));
    String query = "SELECT …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablerowsorter tablemodel

2
推荐指数
1
解决办法
2369
查看次数

无法将列比较器设置为JTable

在另一个线程中,我找到了这个比较器(post的底部),用于对JTable列进行排序,这些列可以由整数,字符串或两者组成.我无法弄清楚如何将它应用于我的JTable.我的表之前使用的是自动创建的行排序器.我将其设置为false,我现在正在使用:

TableRowSorter<MyTableModel> rowSorter = new TableRowSorter<MyTableModel>();
jtable.setRowSorter(rowSorter);
rowSorter.setComparator(0, c1);
Run Code Online (Sandbox Code Playgroud)

我得到一个索引超出范围的例外,说我提供的无效范围.我的表有多列.这是应用比较器的正确方法吗?我觉得这不是这样做的方法.

Comparator c1 = new java.util.Comparator() {
    /**
     * Custom compare to sort numbers as numbers.
     * Strings as strings, with numbers ordered before strings.
     * 
     * @param o1
     * @param o2
     * @return
     */
@Override
            public int compare(Object oo1, Object oo2) {
                boolean isFirstNumeric, isSecondNumeric;
                String o1 = oo1.toString(), o2 = oo2.toString();


        isFirstNumeric = o1.matches("\\d+");
        isSecondNumeric = o2.matches("\\d+");

        if (isFirstNumeric) {
            if (isSecondNumeric) {
                return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
            } else {
                return …
Run Code Online (Sandbox Code Playgroud)

java swing jtable comparator tablerowsorter

2
推荐指数
1
解决办法
7337
查看次数

(J)尽管已启用自动行分类器并使用可比数据,但表仍未排序

我无法使以下Swing表视图可以排序.虽然我确实在列标题翻转时得到了小三角形,但是根据排序状态,表内容不会有任何不同的刷新:

import scala.swing._

val data = Array(
  Array("a", 4, 8.9),
  Array("b", 7, 2.3),
  Array("c", 1, 5.6)
).map(_.map(_.asInstanceOf[AnyRef]))

val m = new javax.swing.table.DefaultTableModel(data, 
  Array[AnyRef]("string", "int", "double")) {

   override def getColumnClass(c: Int): Class[_] = c match {
     case 0 => classOf[java.lang.String ]
     case 1 => classOf[java.lang.Integer]
     case 2 => classOf[java.lang.Double ]
   }
}

val t = new Table
t.model = m
t.peer.setAutoCreateRowSorter(true)

new Frame {
  contents = new ScrollPane(t)
  pack().centerOnScreen()
  open()
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我用不同的外观(截图显示Nimbus)和JDK(OpenJDK 6,OpenJDK 7)测试了这个.此外,我有一个自定义的树表组件,没有问题排序,所以错误必须在上面的某处.

java swing scala jtable tablerowsorter

2
推荐指数
1
解决办法
169
查看次数

JTable RowFilter

是否可以获得一些如何获得与非过滤表相对应的选择索引?

使用regexFilter过滤表后.JTable getSelectedRow返回过滤表的索引?

java swing jtable rowfilter tablerowsorter

1
推荐指数
1
解决办法
3077
查看次数

排序行后,在Swing JTable中更改行颜色

我们使用JTable显示数据以及状态(新建,已处理,已关闭).每个状态行都有不同的颜色,这是通过重载JTable的prepareRenderer()来实现的.

现在我们需要对该表进行排序,我们正在使用table.setAutoCreateRowSorter(true); 实现这一目标.行正确排序,但行的颜色保持不变.我们需要根据状态列在此操作之后将颜色重新应用于所有行.

我想知道什么是实现这一目标的最佳方法.我可以通过以下几种方式思考:

  1. 重新绘制/重新验证表格.但我认为干脆这样做是行不通的.
  2. 捕获mouseClicked事件并确定是否单击了列标题然后手动调用prepareRenderer()然后调用repaint/revalidate
  3. 然后我读了一个问题,其中一个答案提到不要直接调用repaint/revalidate,而是更改底层数据模型,它会自动调用上面的方法.

我不知道该怎么做.任何人都可以提供一个洞察力,了解实现这一目标的正确方法是什么?

java swing jtable tablerowsorter

1
推荐指数
1
解决办法
3466
查看次数

使用TableRowSorter在JTable中获取正确的行

我目前正在将JTable与TableRowSorter结合使用,以为用户实现搜索功能。下面是我的代码

    tblDutyList = new JTable() {
        @Override
        public java.awt.Component prepareRenderer(
                TableCellRenderer renderer, int row, int col) {
            java.awt.Component comp = super.prepareRenderer(renderer, row,
                    col);
            Object value = getModel().getValueAt(row, 4);
            if (value.equals("Inactive")) {
                comp.setBackground(Color.white);
                comp.setForeground(Color.GRAY);
            } else {
                if (tblDutyList.isCellSelected(row, col)) {
                    comp.setBackground(Color.lightGray);
                    comp.setForeground(Color.BLACK);
                } else
                    comp.setBackground(Color.white);
                comp.setForeground(Color.BLACK);
            }
            return comp;
        }
    };

    tblDutyList.setFillsViewportHeight(true);
    String dutyId = "0", dutyName = "", dutyDesc = "", dutySectorName = "", dutyStatus = "", dutyRemoveReason = "";

    Duty d = new Duty(Integer.parseInt(dutyId), dutyName, dutyDesc,
            dutySectorName, dutyStatus, …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablerowsorter

1
推荐指数
1
解决办法
996
查看次数

在 JTable 中使用 setAutoCreateRowSorter 对不同数据类型进行排序

我正在通过 Java 查询 MySQL 数据库,从结果集中提取数据并将其放入 DefaultTableModel,然后放入 JTable,然后放入 JScrollPane 以显示。

在 JTable 中,我通过在表中启用排序

table.setAutoCreateRowSorter(true);
Run Code Online (Sandbox Code Playgroud)

但是,如果我要排序的行中的单元格不是 String 类,那么我会收到 java.lang.ClassCastException。我的表中的数据具有以下类:

java.sql.Date
java.sql.Time
java.lang.Double
java.lang.Boolean
java.lang.String
Run Code Online (Sandbox Code Playgroud)

下面是当我尝试对 java.lang.Double 类的列进行排序时遇到的错误,然后是将结果集作为输入输出 JTable 的类。如果有人对我如何解决排序问题有任何想法,将不胜感激。

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Double `enter code here`cannot be cast to java.lang.String
    at java.text.Collator.compare(Collator.java:327)
    at javax.swing.DefaultRowSorter.compare(DefaultRowSorter.java:968)
    at javax.swing.DefaultRowSorter.access$100(DefaultRowSorter.java:112)
    at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1376)
    at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1366)
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
    at java.util.Arrays.sort(Arrays.java:472)
    at javax.swing.DefaultRowSorter.sort(DefaultRowSorter.java:607)
    at javax.swing.DefaultRowSorter.setSortKeys(DefaultRowSorter.java:319)
    at javax.swing.DefaultRowSorter.toggleSortOrder(DefaultRowSorter.java:480)
    at javax.swing.plaf.basic.BasicTableHeaderUI$MouseInputHandler.mouseClicked(BasicTableHeaderUI.java:112)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269)
    at java.awt.Component.processMouseEvent(Component.java:6508)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861) …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablerowsorter

0
推荐指数
1
解决办法
5159
查看次数