2017-05-19 10 views
0

저는 java를 처음 사용했습니다. 자습서를 따라 db에서 jTable으로 이미지 및 기타 데이터를 검색합니다. 데이터는 먼저 ArrayList를 검색 할 것이고,이 오류는 배열 필요하지만 객체를 찾았다는 것을 알게됩니다. 모든 코드를 추가했습니다. 오류는 TheModel.java 파일에 있습니다. 어떤 도움을 주시면 감사하겠습니다.어레이가 필요하지만 객체를 찾았습니다 - 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; 
} 
} 

MainQuery.java

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; 

    } 


} 

TheModel.java

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


} 
+0

여러 사용자 ID를 사용하여 종료하십시오. http://stackoverflow.com/users/5832930/kasun – camickr

답변

0

TheModel, 그것은

public class TheModel extends AbstractTableModel { 

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

감사합니다. 이제 오류가 발생했습니다. 감사합니다. 그러나 그것은 테이블에 SQL 결과를 표시하기로되어있었습니다. 그러나 아무 일도 일어나지 않고 있습니다. 데이터베이스에는 4 열, 테이블에는 4 열이 있습니다. 도와주세요, 제발 – Kassa

0

rows이 경우에 Object 배열이지만 배열의 배열을 필요로해야한다 Object

Object[] ->Object[][]

0

TableModel이 잘못되었습니다. 하지 마십시오 : 당신은 모든 개체를 보유 할 배열을 만들기 위해 얼마나 큰 모르기 때문에

  1. Course 오브젝트를 개최 배열을 사용합니다.

  2. 클래스를 구성하는 매개 변수로 2D Array를 사용합니다. 대신

는 :

  1. Course 객체를 유지하는 ArrayList를 사용합니다. ArrayList 크기는 모든 객체를 저장하는 데 더 많은 공간이 필요할 때 자동으로 증가합니다.

  2. 모델을 만들 때 ArrayList를 매개 변수로 전달하십시오.

사용자 정의 개체에 대한 사용자 정의하는 TableModel을 만드는 방법에 대한 단계의 예에 의해 단계에 대한 Row Table Model를 참조하십시오.

관련 문제