Java 结果集存储到cellrendered表的字符串数组中

Java 结果集存储到cellrendered表的字符串数组中,java,swing,jtable,resultset,tablecellrenderer,Java,Swing,Jtable,Resultset,Tablecellrenderer,您好,我是java的JTable新手, 我的数据库中有一个存储在resultset中的多个rresult。 我的问题是我在jtable中使用cellrendered,除了将结果集存储在字符串[]或对象[]中之外,我别无选择 String[] columnNames = {"Employee ID", "Firstname","Lastname", "Position"}; String[][] database;//This is where i need to put the result s

您好,我是java的JTable新手, 我的数据库中有一个存储在resultset中的多个rresult。 我的问题是我在jtable中使用cellrendered,除了将结果集存储在字符串[]或对象[]中之外,我别无选择

String[] columnNames = {"Employee ID", "Firstname","Lastname", "Position"};
String[][] database;//This is where i need to put the result set
DefaultTableModel model = new DefaultTableModel(database,columnNames){
    public Class getColumnClass(int column){
        return getValueAt(1, column).getClass();
    }
};
这是创建表的函数

private JComponent createData(DefaultTableModel model)
{
        JTable table = new JTable( model )
        {
            public Component prepareRenderer(TableCellRenderer renderer, int row, int     column)
            {
                Component c = super.prepareRenderer(renderer, row, column);
                if (!isRowSelected(row))
                {
                    c.setBackground(getBackground());
                   int modelRow = convertRowIndexToModel(row);
                String type = (String)getModel().getValueAt(modelRow, 1);
                if ("Nick".equals(type)) c.setBackground(Color.GREEN);
                if ("Leth".equals(type)) c.setBackground(Color.YELLOW);`
            }

            return c;
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(0, 0, false, false);
    table.setAutoCreateRowSorter(true);
    JScrollPane scrollPane = new JScrollPane( table );
    scrollPane.setBounds(252, 11, 404, 402);
    return scrollPane;
}
这就是我调用函数来创建表
getContentPane().add(createData(model))
和字符串[][]数据库变量是从数据库插入数据的方法。 这就是我在谷歌的方式,到目前为止,我对cellrendered没有任何想法,这就是为什么我认为我需要将结果集存储在字符串[][]中,以实现我的目标。 这是我从数据库中获取数据的地方

public void loadList(){
    String sql = "SELECT emp_id,lname,fname,positional_status from tblEmployee";
    try{
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        while (rs.next()){
          //what goes here to populate my data fetch from database and put in
          // String[][] database?
        }
    }catch(Exception err){
        JOptionPane.showMessageDialog(null, err);
    }

}

任何建议都将不胜感激。

下面的帖子可能会对您有所帮助


为了便于学习和更好地理解,请阅读更多有关自定义渲染器和其他示例以及详细示例代码的说明。

可能的第一步是从
结果集创建
字符串[][]
。我假设您希望能够显示的行数是最大的,所以我在这里包含了这个想法。这只是为了展示迭代如何工作的基本思想。此处,
maximumrrows
numberOfColumns
resultSet
已在范围内并已初始化

String[][] data = new String[maximumRows][numberOfColumns];
for (int rowNum = 0; rowNum < maximumRows && resultSet.next(); rowNum++) {
    for (int columnNum = 0; columnNum < numberOfColumns; columnNum++ ) {
        Object value = resultSet.getObject(columnNum + 1);
        if (value != null) {
            data[rowNum][columnNum] = value.toString();
        }
    }
}
String[][]数据=新字符串[maximumRows][numberOfColumns];
对于(int rowNum=0;rowNum
这里的一个关键点是第二行的
resultSet.next()
。这就是导致
ResultSet
从一行移动到下一行的原因。如果没有更多数据,它还会返回
false


一旦你有了
字符串[][]
,你就可以把它传递给
DefaultTableModel
的构造函数,甚至直接传递给
JTable
,这取决于你的表的要求。

我想我不太明白确切的问题是什么。想详细说明一下吗?到底是什么给你带来了问题,还是不起作用。另外,为了更好地提供帮助,我建议发布一个使用硬编码的值来表示希望从DB获得的值。这样我们就可以复制->粘贴->编译->运行您的代码,更好地了解问题出在哪里您可以迭代您的
结果集
,并在运行过程中构建您的
字符串[][]
。对不起,我不知道有什么更简单的方法。大卫,这正是我想要的,但我不知道怎么做。我不太擅长将数据从resultset迭代到String[][]。您应该能够从中获得一些信息。数据没有添加到字符串[][]数据,而是设置为字符串[][]数据=null;