Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 AbstractTableModel存在问题,无法显示表_Java_Swing_Jtable - Fatal编程技术网

Java AbstractTableModel存在问题,无法显示表

Java AbstractTableModel存在问题,无法显示表,java,swing,jtable,Java,Swing,Jtable,我正在尝试使用现有的ArrayList绘制一个表。这个论坛的某个人告诉我使用AbstractModelTable public class prueba2 extends JFrame{ private ArrayList<alumnos> nLista = new ArrayList<alumnos>(); private String[] columnas = {"Nombre","Apellidos","Ciudad"}; publi

我正在尝试使用现有的ArrayList绘制一个表。这个论坛的某个人告诉我使用AbstractModelTable

public class prueba2 extends JFrame{

    private ArrayList<alumnos> nLista = new ArrayList<alumnos>();
    private String[] columnas = {"Nombre","Apellidos","Ciudad"};


     public prueba2(){

       nLista.add(new alumnos("Alberto","Espina","Malaga"));
       nLista.add(new alumnos("Luisa","Sanchez","Madrid"));
       nLista.add(new alumnos("Maria","Queixo","Tarragona"));
       nLista.add(new alumnos("Alvaro","Gomez","Alicante"));
       nLista.add(new alumnos("Pablo","Robles","El ejido"));

       TablaAbs abs = new TablaAbs(nLista, columnas);
       JTable tabla = new JTable(abs);
       add(tabla);
       setLayout(null);
       setVisible(true);

           for(alumnos a: nLista){
               System.out.println(a.Frase());
           }
       }

    }

    class alumnos{
    private String nombre;
    private String apellidos;
    private String ciudad;

    public alumnos(String nombre,String apellidos,String ciudad){
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.ciudad = ciudad;
    }
    public String Frase(){
        return "Nombre " +nombre+ "apellidos " +apellidos+ " Ciudad " +ciudad;
    }
    }

    class TablaAbs extends AbstractTableModel{

    private ArrayList aL;
    private String[] columnas;

    public TablaAbs(ArrayList nLista, String[] columnas){
        aL = nLista;
        this.columnas = columnas;
    }

    @Override
    public int getRowCount() {
        return aL.size();
    }

    @Override
    public int getColumnCount() {
        return columnas.length;
    }

    @Override
    public String getColumnName(int column) {
        return columnas[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return aL.get(rowIndex);
    }

    }

我试过使用普通数组、ArrayList(在本例中)甚至DefaultTableModel,但不知道我做错了什么。这些表从未出现。

如注释中所述,使用setLayoutnull会给您带来很多问题。特别是显示JTable。解决方案是注意我对代码所做的更改,并且它可以正常工作。还请注意,我将类的名称从prueb2更改为prueb2。强烈建议遵循标准命名约定-所有类名都应以大写字母开头

public class Prueba2 extends JFrame {

    private ArrayList<alumnos> nLista = new ArrayList<alumnos>();
    private String[] columnas = { "Nombre", "Apellidos", "Ciudad" };

    public Prueba2() {

        nLista.add(new Alumnos("Alberto", "Espina", "Malaga"));
        nLista.add(new Alumnos("Luisa", "Sanchez", "Madrid"));
        nLista.add(new Alumnos("Maria", "Queixo", "Tarragona"));
        nLista.add(new Alumnos("Alvaro", "Gomez", "Alicante"));
        nLista.add(new Alumnos("Pablo", "Robles", "El ejido"));

        TablaAbs abs = new TablaAbs(nLista, columnas);
        JTable tabla = new JTable(abs);

        getContentPane().setLayout(new BorderLayout()); // Use a layout manager
        getContentPane().add(tabla);
        setVisible(true);

    }

    public static void main(String[] args) {
        // All swing applications must run on their own thread.
        SwingUtilities.invokeLater(() -> new Prueba2());
    }

}

class Alumnos {
    private String nombre;
    private String apellidos;
    private String ciudad;

    public Alumnos(String nombre, String apellidos, String ciudad) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.ciudad = ciudad;
    }

    public String Frase() {
        return "Nombre " + nombre + "apellidos " + apellidos + " Ciudad " + ciudad;
    }
}

class TablaAbs extends AbstractTableModel {

    private ArrayList aL;
    private String[] columnas;

    public TablaAbs(ArrayList nLista, String[] columnas) {
        aL = nLista;
        this.columnas = columnas;
    }

    @Override
    public int getRowCount() {
        return aL.size();
    }

    @Override
    public int getColumnCount() {
        return columnas.length;
    }

    @Override
    public String getColumnName(int column) {
        return columnas[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return aL.get(rowIndex);
    }

}

谢谢你的帮助!还有一件事,虽然我使用getColumnName方法,但我看不到标题表。我看不到标题表-一个JTable总是添加到JScrollPane中,然后滚动窗格添加到框架中。有关工作示例,请阅读上的Swing教程。本教程还有一节介绍布局管理器。