Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要数组,但找到对象-java_Java_Swing_Jtable - Fatal编程技术网

需要数组,但找到对象-java

需要数组,但找到对象-java,java,swing,jtable,Java,Swing,Jtable,我是java新手。我遵循一个教程,将图像和其他数据从db检索到jTable。数据将首先检索到ArrayList,我得到这样一个错误,表示需要数组,但找到了对象。我已经添加了我所有的代码。错误在model.java文件中。任何帮助都将不胜感激 Course.java package my.welcomescreen; public class Course { private int id; private String name; private byte[] ima

我是java新手。我遵循一个教程,将图像和其他数据从db检索到jTable。数据将首先检索到ArrayList,我得到这样一个错误,表示需要数组,但找到了对象。我已经添加了我所有的代码。错误在
model.java
文件中。任何帮助都将不胜感激

Course.java

package my.welcomescreen;


public class Course {
    private int id;
    private String name;
    private byte[] imag;
    private String desc;

public Course(){}

public Course(int Id, String Name, byte[] image, String description){
    this.id = Id;
    this.name = Name;
    this.imag = image;
    this.desc = description;
}

public int getID(){
    return id;
}

public void setID(int ID){
    this.id = ID;
}

public String getName(){
    return name;
}

public void setName(String Name){
    this.name = Name;
}

public byte[] getImage(){
    return imag;
}

public String getDesc(){
    return desc;
}

public void setDesc(String Description){
    this.desc = Description;
}
}
package my.welcomescreen;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MainQuery {

    public ArrayList<Course> BindTable(){
    ArrayList<Course> list = new ArrayList<Course>();
    db databaseCon = new db();
    Connection dbconnect = db.dbconnect();
    Connection con = databaseCon.dbconnect();
    Statement st;
    ResultSet rs;

    try{
        st = con.createStatement();
        String sql = "select id,name,img,description from courses";
        rs = st.executeQuery(sql);

        Course c;
        while(rs.next()){
            c = new Course(
                            rs.getInt("id"),
                            rs.getString("name"),
                            rs.getBytes("img"),
                            rs.getString("description")
                           );

        }

    } catch (SQLException ex) {
        Logger.getLogger(Admin_Panel.class.getName()).log(Level.SEVERE, null, ex);
    }

    return list;

   }


}
package my.welcomescreen;

import javax.swing.Icon;
import javax.swing.table.AbstractTableModel;


public class TheModel extends AbstractTableModel {

    private String[] columns;
    private Object[] rows;

    public TheModel(){}

    public TheModel(Object[][] data, String[] columnName){
        this.rows = data;
        this.columns = columnName;
    }

    public Class getColumnClass(int Column){
        if(Column == 2){
            return Icon.class;
        } else {
            return getValueAt(0,Column).getClass();
        }
    }


    public int getRowCount() {
        return this.rows.length;
    }


    public int getColumnCount() {
        return this.columns.length;
    }


public Object getValueAt(int rowIndex, int columnIndex) {
     return this.rows[rowIndex][columnIndex]; //this is the error line : array required but object found
}

public String getColumnName(int col){
    return this.columns[col];
}

}
MainQuery.java

package my.welcomescreen;


public class Course {
    private int id;
    private String name;
    private byte[] imag;
    private String desc;

public Course(){}

public Course(int Id, String Name, byte[] image, String description){
    this.id = Id;
    this.name = Name;
    this.imag = image;
    this.desc = description;
}

public int getID(){
    return id;
}

public void setID(int ID){
    this.id = ID;
}

public String getName(){
    return name;
}

public void setName(String Name){
    this.name = Name;
}

public byte[] getImage(){
    return imag;
}

public String getDesc(){
    return desc;
}

public void setDesc(String Description){
    this.desc = Description;
}
}
package my.welcomescreen;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MainQuery {

    public ArrayList<Course> BindTable(){
    ArrayList<Course> list = new ArrayList<Course>();
    db databaseCon = new db();
    Connection dbconnect = db.dbconnect();
    Connection con = databaseCon.dbconnect();
    Statement st;
    ResultSet rs;

    try{
        st = con.createStatement();
        String sql = "select id,name,img,description from courses";
        rs = st.executeQuery(sql);

        Course c;
        while(rs.next()){
            c = new Course(
                            rs.getInt("id"),
                            rs.getString("name"),
                            rs.getBytes("img"),
                            rs.getString("description")
                           );

        }

    } catch (SQLException ex) {
        Logger.getLogger(Admin_Panel.class.getName()).log(Level.SEVERE, null, ex);
    }

    return list;

   }


}
package my.welcomescreen;

import javax.swing.Icon;
import javax.swing.table.AbstractTableModel;


public class TheModel extends AbstractTableModel {

    private String[] columns;
    private Object[] rows;

    public TheModel(){}

    public TheModel(Object[][] data, String[] columnName){
        this.rows = data;
        this.columns = columnName;
    }

    public Class getColumnClass(int Column){
        if(Column == 2){
            return Icon.class;
        } else {
            return getValueAt(0,Column).getClass();
        }
    }


    public int getRowCount() {
        return this.rows.length;
    }


    public int getColumnCount() {
        return this.columns.length;
    }


public Object getValueAt(int rowIndex, int columnIndex) {
     return this.rows[rowIndex][columnIndex]; //this is the error line : array required but object found
}

public String getColumnName(int col){
    return this.columns[col];
}

}
主要方法

public void displayJTable(){
    MainQuery mq = new MainQuery();
    ArrayList<Course> list = mq.BindTable();
    String[] columnName = {"Id","Course Name","Image","Description"};
    Object[][] rows = new Object[list.size()][3];
    for(int i = 0; i < list.size(); i++){
        rows[i][0] = list.get(i).getID();
        rows[i][1] = list.get(i).getName();

        if(list.get(i).getImage() != null){

         ImageIcon image = new ImageIcon(new ImageIcon(list.get(i).getImage()).getImage()
         .getScaledInstance(150, 120, Image.SCALE_SMOOTH) );   

        rows[i][2] = image;
        }

        rows[i][3] = list.get(i).getDesc();
    }

    TheModel model = new TheModel(rows, columnName);
    jTable1.setModel(model);
    jTable1.setRowHeight(120);
    jTable1.getColumnModel().getColumn(3).setPreferredWidth(150);


}
public void displayJTable(){
MainQuery mq=新的MainQuery();
ArrayList list=mq.BindTable();
String[]columnName={“Id”、“课程名称”、“图像”、“描述”};
Object[][]行=新对象[list.size()][3];
对于(int i=0;i
模型中

public class TheModel extends AbstractTableModel {

    private String[] columns;
    private Object[][] rows; //since data is 2 dimensional array
    ..//rest of code
}

在模型中,它应该是

public class TheModel extends AbstractTableModel {

    private String[] columns;
    private Object[][] rows; //since data is 2 dimensional array
    ..//rest of code
}

在您的示例中是一个
对象
数组,但您需要一个
对象
数组


Object[]
->
Object[][
在您的示例中是一个
对象
数组,但您需要一个
对象
的数组


对象[]
->
对象[]

您的表格模型错误。不要:

  • 使用数组来容纳
    课程
    对象,因为您不知道让数组容纳所有对象的大小

  • 使用二维数组作为参数来构造类

  • 相反:

  • 使用ArrayList保存
    课程
    对象。ArrayList大小将自动增加,因为需要更多的空间来容纳所有对象

  • 创建模型时,将ArrayList作为参数传入


  • 有关如何为自定义对象创建自定义TableModel的分步示例,请参阅。

    您的TableModel错误。不要:

  • 使用数组来容纳
    课程
    对象,因为您不知道让数组容纳所有对象的大小

  • 使用二维数组作为参数来构造类

  • 相反:

  • 使用ArrayList保存
    课程
    对象。ArrayList大小将自动增加,因为需要更多的空间来容纳所有对象

  • 创建模型时,将ArrayList作为参数传入


  • 有关如何为自定义对象创建自定义TableModel的分步示例,请参阅。

    多亏了您,错误现在已得到修复!。但是它应该在表中显示sql结果。但什么都没有发生。数据库中有4列,表中也有4列。请帮帮我,多亏了你,错误现在已经解决了!。但是它应该在表中显示sql结果。但什么都没有发生。数据库中有4列,表中也有4列。请帮助我要求使用多个用户标识:退出使用多个用户标识: