java - AbstractTableModel 的问题,表格不显示
问题描述
我正在尝试使用现有的 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,但不知道我做错了什么。桌子从未出现过。
解决方案
正如评论中提到的,使用setLayout(null)
会给你带来很多问题。特别是对于显示JTable
. 解决方案是使用 LayoutManager。请注意我对您的代码所做的更改并且它有效。另请注意,我将类的名称从 更改prueba2
为Prueba2
。强烈建议遵循标准命名约定——所有类名都应以大写字母开头。
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);
}
}
推荐阅读
- android - 加载新数据时,recyclerview 顶部的项目布局突然发生变化
- json - 如何使用谷歌脚本获取数组中的特定 api 响应路径
- sql - 查找总成本低于平均 SQL
- c# - CRUD - 创建选择下拉列表自动填充另一个输入框 ASP.NET Razor Pages
- visual-studio-code - 当我尝试添加括号对扩展时,我的 settings.json(VS 代码)有问题
- speech-recognition - Azure diarization(扬声器分离)不起作用
- javascript - 动态创建的表单在 django rest 框架 api POST 上总是被禁止 403
- javascript - 有没有一种简单的方法来判断一个元素是否不可点击?
- powerbuilder - 如何激活 Vscroll xplistbar Advance GUI PowerBuilder
- ajax - 无法在 Laravel 资源控制器中获取发布 Ajax 数据