2013-05-03 4 views
0

나는 arraylist를 2D 배열로 만들고 테이블에 추가하여 데이터를 표시하는 데 어려움을 겪고 있습니다.Arraylist에서 2D 배열로 그리고 나서 JTable으로

import java.awt.*; 
import javax.swing.*; 
import java.util.ArrayList; 
import java.util.List; 

public class Planettabell 
{ 
public static void main(String[] args) 
    { 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
     JFrame vindu = new Test(); 
     vindu.setVisible(true); 
     } 
    }); 
    } 
} 

class Test extends JFrame 
{ 
    private String[] name = {"Name", "grade"}; 

    Object[][] cell = {{"nameHer", "GradeHer"}}; 
    Object[][] cell2 = {{"nameHer2", "gradeHer2"}}; 
    Object[][] cell3 = {{"nameHer3", "gradeHer3"} }; 

    public Test() 
    { 
    setTitle("Planettabell"); 
    setSize(500, 210); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    List<Object[]> list = new ArrayList<Object[]>(); 
    list.add(cell); 
    list.add(cell2); 
    list.add(cell3); 

    Object[][]array = list.toArray(new Object[list.size()][]); 

    JTable tabell = new JTable(array, name); 

    Container c = getContentPane(); 
    c.setLayout(new FlowLayout()); 
    c.add(new JScrollPane(tabell), BorderLayout.CENTER); 
    } 


} 

내가 대신 JTable의에 '배열'의 '세포'를 추가하면이 코드가 작동 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1

를 실행하면 나는이 메시지를 받게됩니다,하지만 난 일을 목록에서 전체 배열이 필요합니다 .

은 내가 또한 시도 :

int number = list.size()/2; 
Object[][] ArrayNew = new Object[number][2]; 
for(int x = 0; x< number; x++) 
{ 
    for(int z = 0; z < 2; z++) 
    { 
     int y = 2 * x; 
     ArrayNew [x][z] = list.get(y+z); 
    } 
} 

JTable tabell = new JTable(ArrayNew, name); 

대신 list.toarray의. 그러나 그때 나는 표의 텍스트가 있어야하는 [[Ljava.lang.Object; @ 28864ae7 및 [Ljava.lang.Object; @ 49214a13] 만 가져옵니다.

어떤 대답을 :) appreicate 것

+0

가능한 복제 (http://stackoverflow.com/questions/2146488/converting-an-arraylist-into-a-2d-array). 그렇지 않다면 어떤 영감을 줄 수 있습니다 :) – davmos

+0

나는 전에 질문을 보았지만 대답을 시도했지만 슬프게도 그 중 아무도 나를 위해 일하는 것 같지 않습니다. – Madde

답변

2

귀하의 목록에 효과적으로 3D 데이터 구조 (2 차원 배열의 목록), 그것은 2 차원 (배열 목록) 만해야입니다 :

Object[] information = {"nameHer", "GradeHer"}; 
List<Object[]> list = new ArrayList<Object[]>(); 
list.add(information); // more data here 

Object[][]array = list.toArray(new Object[list.size()][]); 

에서을 귀하의 코드 Object[][] cell = {{"nameHer", "GradeHer"}};은 2D 배열이며 목록에 추가합니다 (과정에서 3 차원으로 목록이 작성됩니다). 셀이 2D가 아니어야하며 셀이 행을 나타내며 1D 배열이어야합니다.

Object[] cell = {"nameHer", "GradeHer"};으로 교체하고 당신이이 문제가 완전히 잘못 접근하고

+0

"[[email protected]" 프로그램을 실행할 때 테이블이 있어야 할 곳 – Madde

+1

문제를 재현 할 수 있도록 [SSCE] (http://sscce.org/)를 추가 할 수 있습니까? – Guillaume

+0

예, 내 질문에있는 코드를 약간의 프로그램으로 바 꾸었습니다 – Madde

1

작동합니다.

DefaultTableModel은 2 차원 배열을 취해서 열 머리글을 포함하여 모든 것을 표시합니다. 그래서 KarakterTabell에 코드를 보지 않고서는 더 많은 것을 성취하려고 노력하고 있습니다.

테이블 모델을 올바르게 수행하려면 x, y 형식으로 데이터에 액세스 할 수있는 방법 만 있으면됩니다.

public class KarakterTableModel implements TableModel { 
    List<String[]> data = new ArrayList<String[]>(); 

    public KarakterTableModel(BufferedReader reader) { 
     while(reader.ready()) { 

     String columnData = reader.readLine(); 
     String[] columns = columnData.split(" "); 
     data.add(columns); 
     } 
    } 
    public Object getValueAt(int x, int y) { 
     String[] row = data.get(x); 
     return row[y]; 
    } 

} 

JTable table = new Jtable(new KarakterMode(new BufferedReader(System.in)); 

는 또한 기억 : 그런 다음, 테이블이 다가와서 때 실행이 새로운 모델로 데이터 스트림 전달은() 해 getValueAt 공공 객체의 - JTable가이 둘 것이다 "toString()를" 이 호출에서 셀로 반환되는 모든 것의 호출. [이 질문]의

2

Planettabell

import java.awt.*; 
import javax.swing.*; 
import java.util.ArrayList; 
import java.util.List; 

public class Planettabell 
{ 
public static void main(String[] args) 
    { 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
     JFrame vindu = new Test(); 
     vindu.setVisible(true); 
     } 
    }); 
    } 
} 

class Test extends JFrame 
{ 
    private String[] name = {"Name", "grade"}; 

    Object[][] cells = { 
     {"nameHer", "GradeHer"}, 
     {"nameHer2", "gradeHer2"}, 
     {"nameHer3", "gradeHer3"} 
    }; 

    public Test() 
    { 
    setTitle("Planettabell"); 
    setSize(500, 210); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JTable tabell = new JTable(cells, name); 

    Container c = getContentPane(); 
    c.setLayout(new FlowLayout()); 
    c.add(new JScrollPane(tabell), BorderLayout.CENTER); 
    } 
} 
+0

안녕하세요, 대답에 대한 thx, 유일한 문제는 내 실제 프로그램 이후 얼마나 많은 사람들이 (어떤 순간에 될 수 있는지 알지 못해 arraylist에서 오는 것이 필요하다는 것입니다) 시스템에 있습니다. 그리고 나는 그것이 얼마나 많은 세포인지는 알 수 없을 것이다. – Madde

+0

그래서 1) 테이블에 삽입하기 직전에 2D 배열에'ArrayList'를 만들거나 2)'ArrayList'를 받아들이는'TableModel'을 만듭니다. 아무런 문제가 없으며 대안 만 있습니다. –

+0

arraylist를 2D 배열로 변환하려고합니다. 이것이 의미하는 것이라면? 그러나 그것은 당신이 프로그램에서 볼 수있는 것처럼 작동하지 않습니다. – Madde

관련 문제