gpt4 book ai didi

java - 连接到 JDBC 时使用 getColumnClass() 对 JTable 进行排序

转载 作者:行者123 更新时间:2023-11-30 07:54:51 24 4
gpt4 key购买 nike

我花了几天时间试图让我的 JTable 正确排序。我知道我必须使用的代码,但似乎无法将其“适合”并应用于我的代码。我正在从数据库获取 TableModel 数据,因此如果我在初始化模型时调用 getColumnClass() ,我会得到一个 NullPointerException (当然),但我似乎无法让 getColumnClass(int) 在其他地方工作,例如model.getColumnClass(columnIndex)。我只需要按数字顺序对第一列进行排序,因为其余的都是字符串。这是我的代码。 (ps:这是第一次使用 JBDC,所以我很可能在调用的顺序上有错误 - 或者可能是用“普通”方式进行的,哈哈)

    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);        }

最佳答案

it is sorting but by the first number only. so is sorting like this: 123 17 22 28 45 5 56 66

因为它将所有数据视为字符串数据。

model = new DefaultTableModel(); 
jTable1 = new JTable(model);

您正在使用 DefaultTableModel 和 JTable 的默认实现。 getColumnClass(...) 方法的默认实现仅返回 Object.class,以便对每个对象的 toString() 值进行排序。

您不需要手动调用 getColumnClass() 方法,您需要重写 TableModelgetColumnClass(...) 方法:

model = new DefaultTableModel()
{
@Override
public Class getColumnClass (int column)
{
return (column == 0) ? Integer.class : String.class;
}
};

关于java - 连接到 JDBC 时使用 getColumnClass() 对 JTable 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32804794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com