Java 在Jtable中显示记录时出现问题
我使用DefaultTable模型在Jtable中显示我的记录。但是有一个问题,如图所示。当我加载Jtable时,它的显示方式类似于LJava.lang.Object类型。不在字符串中..我如何解决这个问题。 这是我的密码Java 在Jtable中显示记录时出现问题,java,swing,jtable,Java,Swing,Jtable,我使用DefaultTable模型在Jtable中显示我的记录。但是有一个问题,如图所示。当我加载Jtable时,它的显示方式类似于LJava.lang.Object类型。不在字符串中..我如何解决这个问题。 这是我的密码 EntityManagerFactory emf = Persistence.createEntityManagerFactory("SwingDenemePU"); EntityManager em = emf.createEntityManager(); Query so
EntityManagerFactory emf = Persistence.createEntityManagerFactory("SwingDenemePU");
EntityManager em = emf.createEntityManager();
Query sorgu = em.createQuery("select p from Personel p where p.personelAdSoyad like :ad");
Object[] kolonAdi = {"AD SOYAD","ÜNVAN ADI"};
sorgu.setParameter("ad", jTextField1.getText()+"%");
personelList = sorgu.getResultList();
Object[][] data = new Object[personelList.size()][kolonAdi.length];
for(int m=0; m<personelList.size(); m++)
for(int n=0; n<kolonAdi.length; n++)
for(Personel o : personelList) {
Personel personel = (Personel)o;
data[m][n] = new Object[][]{
{
personel.getPersonelAdSoyad(),
personel.getUnvanID().getUnvanAdi()
}
};
}
DefaultTableModel def = new DefaultTableModel();
def.setDataVector(data, kolonAdi);
jTable1.setModel(def);
EntityManagerFactory emf=Persistence.createEntityManagerFactory(“SwingDenemePU”);
EntityManager em=emf.createEntityManager();
Query sorgu=em.createQuery(“从Personel p中选择p,其中p.personelAdSoyad类似于:ad”);
对象[]kolonAdi={“AD SOYAD”,“ÜNVAN ADI”};
sorgu.setParameter(“ad”,jTextField1.getText()+“%”);
personelList=sorgu.getResultList();
Object[][]数据=新对象[personelList.size()][kolonAdi.length];
对于(int m=0;m,DefaultTableModel将所有值显示为字符串。您看到的是表中显示的值的默认Object.toString()实现的结果
最简单的解决方案是重写toString()为表中显示的对象返回合理的值。但是,您最好实现自己的表模型,该模型更适合您正在显示的数据。有关表模型的详细信息,请参阅Swing教程。默认表模型将所有值显示为字符串。您看到的是表中显示的值的默认Object.toString()实现
最简单的解决方案是重写toString()为表中显示的对象返回一个合理的值。但是,您最好实现自己的表模型,该模型更适合显示的数据。有关表模型的详细信息,请参阅Swing教程。我不能100%确定发布的代码中的数据布局是什么。但是,我可以告诉您在你的问题解决之前
data[m][n] = new Object[][]{{personel.getPersonelAdSoyad(),personel.getUnvanID().getUnvanAdi()}}
这是在创建一个二维数组,其中包含对象[][]对象。或者更确切地说,是一个mxnx1x2数组
如果您正在寻找mx2阵列,您会这样做(这不是您想要的,只是举个例子[加上personel不在范围内,等等]):
[[Ljava.lang.Object…”文本是对象[]上toString()的结果。这告诉我您的矩阵维度是错误的。我不能100%确定发布的代码中的数据布局是什么。但是,我可以告诉您问题出在哪里
data[m][n] = new Object[][]{{personel.getPersonelAdSoyad(),personel.getUnvanID().getUnvanAdi()}}
这是在创建一个二维数组,其中包含对象[][]对象。或者更确切地说,是一个mxnx1x2数组
如果您正在寻找mx2阵列,您会这样做(这不是您想要的,只是举个例子[加上personel不在范围内,等等]):
[[Ljava.lang.Object…”文本是对象[]上的toString()的结果。这就是告诉我矩阵维数错误的原因。它输出[[Ljava/lang]的原因/Object@....原因很简单,您分配给字段的值似乎属于“Object[][]”类型
你确定这就是你想要的吗
data[m][n] = new Object[][] {}?
我没有在这方面投入太多精力,但我的直觉告诉我,你真正想做的是:
for(int m=0; m<personelList.size(); m++) {
Personel personel = personelList.get(m);
data[m] = new Object[]{
personel.getPersonelAdSoyad(),
personel.getUnvanID().getUnvanAdi()
};
}
for(int m=0;m它输出[[Ljava/lang]的原因/Object@....原因很简单,您分配给字段的值似乎属于“Object[][]”类型
你确定这就是你想要的吗
data[m][n] = new Object[][] {}?
我没有在这方面投入太多精力,但我的直觉告诉我,你真正想做的是:
for(int m=0; m<personelList.size(); m++) {
Personel personel = personelList.get(m);
data[m] = new Object[]{
personel.getPersonelAdSoyad(),
personel.getUnvanID().getUnvanAdi()
};
}
for(int m=0;m根据Mark的回答:
另一个选项是分配一个javax.swing.table.TableCellRenderer
,并调用
javax.swing.table.JTable.setDefaultRenderer(Class, TableCellRenderer)
或
下面是马克的回答:
另一个选项是分配一个javax.swing.table.TableCellRenderer
,并调用
javax.swing.table.JTable.setDefaultRenderer(Class, TableCellRenderer)
或
我建议不要使用DefaultTableModel
,而是使用sub-classAbstractTableModel
。这样,您仍然可以按照Mark建议的方法覆盖对象的toString()
方法,或者可以覆盖getColumnClass(int-column)
返回所返回对象的类,然后通过调用JTable
的setDefaultRenderer(class columnClass,TableCellRenderer renderer renderer)
为该类提供特定的呈现器
我从不使用DefaultTableModel
的主要原因是,这意味着数据有效地存储在两个地方。相反,如果您将AbstractTableModel
子类化,则可以将其实现为基础数据结构的视图(例如列表
上的视图).我建议不要使用DefaultTableModel
,而是使用子类AbstractTableModel
。这样,您仍然可以按照Mark建议的方法重写对象的toString()
方法,或者可以重写getColumnClass(int column)
返回所返回对象的类,然后通过调用JTable
的setDefaultRenderer(class columnClass,TableCellRenderer renderer renderer)
为该类提供特定的呈现器
我从不使用DefaultTableModel
的主要原因是,这意味着数据有效地存储在两个地方。相反,如果您将AbstractTableModel
子类化,则可以将其实现为基础数据结构的视图(例如列表
上的视图)
如果您真的不需要创建一个“Personel”对象来保存数据,那么您可以使用一个通用模型,您可以在条目中找到它
如果您确实需要“Personel”对象,那么您确实需要创建一个自定义模型。但是,这也可以通过使用“Bean表模型”以通用方式完成。您可以通过从上面的链接搜索博客来找到此模型。好吧,看起来您是g
jTable1.setDefaultRenderer(CustomClass.class, customRenderer);