簡體   English   中英

Arraylist轉換為2D數組,然后轉換為JTable

[英]Arraylist to 2D array and then to a JTable

我正在努力使我的arraylist變成2D數組,然后將其添加到表上以顯示數據。

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


}

如果Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1運行Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1我將收到此消息Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1

如果我在JTable上添加“ cell”而不是“ array”,此代碼將起作用,但是我需要從列表中獲取整個數組才能工作。

我也嘗試過:

    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],其中表中的文本應該是。

將不勝感激任何答案:)

您的列表實際上是3D數據結構(2D數組的列表),它應該只有2D(數組的列表):

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"}; 它會工作

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

您正在解決此問題完全錯誤。

DefaultTableModel使用2d數組,並為您顯示所有內容,包括列標題。 因此,在沒有看到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()”調用放入單元格中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM