Java AbstractTableModel存在问题,无法显示表
我正在尝试使用现有的ArrayList绘制一个表。这个论坛的某个人告诉我使用AbstractModelTableJava 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
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教程。本教程还有一节介绍布局管理器。