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

以编程方式对JTable进行排序

董意蕴
2023-03-14
问题内容

有没有办法以编程方式对JTable进行排序?

我的JTable排序工作正常(使用setRowSorter),以便当用户按任意列时,表将被排序。

我知道,SWingX
JXTable可能可以工作,但我不想麻烦,因为其他所有事情现在都可以正常工作,而且我不知道NetBeans的可视化编辑器如何处理JXTable等。

编辑: 选定的答案是指我的声明(现已删除),该声明对Sun的页面的答案不起作用。 那只是我的无知引起的环境问题。


问题答案:

对我来说效果很好:

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

public class TableBasic extends JFrame
{
    public TableBasic()
    {
        String[] columnNames = {"Date", "String", "Long", "Boolean"};
        Object[][] data =
        {
            {new Date(), "A", new Long(1), Boolean.TRUE },
            {new Date(), "B", new Long(2), Boolean.FALSE},
            {new Date(), "C", new Long(9), Boolean.TRUE },
            {new Date(), "D", new Long(4), Boolean.FALSE}
        };

        final JTable table = new JTable(data, columnNames)
        {
            //  Returning the Class of each column will allow different
            //  renderers and editors to be used based on Class

            public Class getColumnClass(int column)
            {
                // Lookup first non-null data on column
                for (int row = 0; row < getRowCount(); row++) 
                {
                    Object o = getValueAt(row, column);

                    if (o != null)
                        return o.getClass();
                }

                return Object.class;
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        table.setAutoCreateRowSorter(true);
        // DefaultRowSorter has the sort() method
        DefaultRowSorter sorter = ((DefaultRowSorter)table.getRowSorter()); 
        ArrayList list = new ArrayList();
        list.add( new RowSorter.SortKey(2, SortOrder.ASCENDING) );
        sorter.setSortKeys(list);
        sorter.sort();

        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args)
    {
        TableBasic frame = new TableBasic();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}

下次在无法正常工作时发布SSCCE。



 类似资料:
  • 问题内容: 启动应用程序时,未选择任何行。但我想表明第一行已被选中。 这该怎么做?我是否需要设置行的颜色? 更新:我尝试了table.setRowSelectionInterval(0,0)。我知道它应该可以工作,但是有一条错误消息: 问题答案: 您可以调用setRowSelectionInterval来做到这一点: 选择第一行。

  • 我还可以在控制台中看到这些行: 我的应用程序服务器是weblogic 12c

  • 我试图实现一个非常简单的用例,一个UI特性,其中: null 这些建议和类似的建议都不起作用。我也试着愚弄一下反应,看看我能不能做点什么!我使用了真实的DOM: 而且也没用。我甚至无法理解的一件事是这样的建议:将ref作为一个方法(我“猜测”),我甚至没有尝试它,因为我有很多这样的组件,我需要ref来进一步获得每个组件的值,我无法想象如果我的ref没有命名,我如何获得的值! 所以你能给出一个想法,

  • 问题内容: 我正在将Xcode7和Swift与Storyboards一起使用。当我打开LaunchScreen.storyboard并尝试在其上设置自定义类时,Xcode抱怨一个人不能在LaunchScreen故事板上拥有自定义类。所以我的问题是,有什么方法可以对LaunchScreen进行编程编码,因为我想避免使用IB在其上拖放元素。 问题答案: 否, 在 您的应用开始执行 之前 会显示启动屏幕

  • 问题内容: 我有一个JTable,其属性AutoCreateRowSorter设置为true。单击时效果很好,但如果单击时仅将鼠标移动1px,则不会出现排序,这在某些情况下不舒服。如何解决这个问题? UPD我只想在释放鼠标时显示排序。 问题答案: 肮脏的方法(请阅读: 如果您不是绝对地绝望,请确切地知道自己在做什么!请不要这样做 ),方法是挂接到uiDelegate安装的MouseListener