我花了几天的时间来尝试正确地进行JTable排序。我知道我必须使用的代码,但似乎不能得到它‘适合’和工作到我的代码。我从数据库获取TableModel数据,因此如果在初始化模型时调用getColumnClass(),我会得到一个NullPointerException(当然),但似乎无法让getColumnClass(int)在其他任何地方(如model.getColumnClass(columnIndex))工作。我只需要按数字顺序对第一列进行排序,因为其馀的都是字符串。这是我的代码。(附注:这是第一次使用JBDC,所以我很可能在调用顺序上有错误--或者可能是用“longhand”来做的,哈哈)
public JTable memberList() { JTable jTable1; DefaultTableModel model; model = new DefaultTableModel(); jTable1 = new JTable(model); TableRowSorter sorter = new TableRowSorter(model); try { Statement stmt = conn.createStatement(); String sql = "select rm.race_no,cm.firstname,cm.lastname,cm.phone,cm.dob,cm.email,cm.TwinTown_ID,rm.disqualified,cm.notes\n" + "from competitor_master cm join competitor_season cs on cm.competitor_id = cs.competitor_id\n" + "inner join race_master rm on cs.race_no= rm.race_no where cm.twintown_id is not null and cs.season_start_year in (year(sysdate()))\n" + "group by (race_no);"; ResultSet rs = stmt.executeQuery(sql); String b = "", c = "", d = "", e = "", f = "", g = "", h = "", i = ""; int a; model.addColumn("Member Number"); model.addColumn("First Name"); model.addColumn("Last Name"); model.addColumn("Phone"); model.addColumn("Date of Birth"); model.addColumn("Email"); model.addColumn("TT Member Number"); model.addColumn("Disqualified"); model.addColumn("Notes"); while(rs.next()) { a = rs.getInt(1); b = rs.getString("FirstName"); c = rs.getString("LastName"); d = rs.getString("phone"); e = rs.getString("dob"); f = rs.getString("email"); g = rs.getString("TwinTown_ID"); h = rs.getString("disqualified"); i = rs.getString("notes"); model.addRow(new Object[] {a,b,c,d,e,f,g,h,i}); model.getColumnClass(1); } stmt.close(); rs.close(); } catch (SQLException ex) { } jTable1.getTableHeader().setFont(new Font("Microsoft Tai Le", Font.BOLD, 14)); jTable1.getTableHeader().setBackground(Color.WHITE); jTable1.getTableHeader().setForeground(new Color(234, 168, 82)); jTable1.getTableHeader().setBorder(null); jTable1.setRowSorter(sorter); return jTable1; }
public Class getColumnClass (int column){ if (column==1) { return(Integer.class); } return(String.class); }
这是排序,但只按第一个数字。排序也是这样的:123 17 22 28 45 5 56 66
因为它将所有数据视为字符串数据。
model = new DefaultTableModel();
jTable1 = new JTable(model);
您正在使用DefaultTableModel和JTable的默认实现。getColumnClass(...)
方法的默认实现只是返回object.Class,以便对每个对象的toString()值进行排序。
您不手动调用getColumnClass()方法,而是需要重写TableModel
的getColumnClass(...)
方法:
model = new DefaultTableModel()
{
@Override
public Class getColumnClass (int column)
{
return (column == 0) ? Integer.class : String.class;
}
};
问题内容: 我有一个JTable,其属性AutoCreateRowSorter设置为true。单击时效果很好,但如果单击时仅将鼠标移动1px,则不会出现排序,这在某些情况下不舒服。如何解决这个问题? UPD我只想在释放鼠标时显示排序。 问题答案: 肮脏的方法(请阅读: 如果您不是绝对地绝望,请确切地知道自己在做什么!请不要这样做 ),方法是挂接到uiDelegate安装的MouseListener
我们所面临的问题已在许多文件中得到充分证明https://stackoverflow.com/questions/34189756/warning-about-ssl-connection-when-connecting-to-mysql-database. 从过渡到时,我们就开始面临这个问题。建议的修复方法对我们有效,但我们有一个问题,我们不想更新Java源文件以进行更改,例如从 到 正如在ht
当添加到JTable(包含表单元格中不同的JCombo Box)中的排序器/autoRowSorter用列标题排序时,Jcomo Box不会用相应的行排序。 单击JCombo框可以更改它在显示组合框的模型值而不是视图值(与行相关的值)中结束的数据。 在互联网上找到的例子,用同样的方法来说明问题。我刚刚添加了setAutoCreateRowSorter(真) 代码参考: 如何在Swing中的JTab
问题内容: Hibernate从基础连接池获得的数据库连接的责任是什么。它在连接使用之前是否进行测试以查看连接是否已关闭?如果是这样,从池中获得另一个连接? 我在下面添加了错误和确认信息。我可以从哪里开始解决此问题的任何想法将非常有帮助。以及有关我们正在使用的SQL Server驱动程序设置的任何建议。 从Catalina日志中: 从我们的应用程序日志中: 配置 : 问题答案: Hibernate
问题内容: 我正在尝试使用JDBC连接到SQL Server 2008。我的SQL Server 2008带有Windows身份验证。 我的代码是 我最终得到ClassNotFoundException。 堆栈跟踪为 问题答案: ClassNotFoundException可能意味着您的类路径中没有可用的SQL * Server驱动程序
问题内容: 有没有办法以编程方式对JTable进行排序? 我的JTable排序工作正常(使用setRowSorter),以便当用户按任意列时,表将被排序。 我知道,SWingX JXTable可能可以工作,但我不想麻烦,因为其他所有事情现在都可以正常工作,而且我不知道NetBeans的可视化编辑器如何处理JXTable等。 编辑: 选定的答案是指我的声明(现已删除),该声明对Sun的页面的答案不起