通过JPA绑定Java JTable
我试图寻找合适的答案,但到目前为止没有任何帮助.我对
java GUI编程很新,实际上,对于java本身.但是我有经理要了解JPA,如何使用JPA检索,插入和删除.
现在我希望我的数据库中的数据显示在JTable中. 我目前有以下mySQL表(我希望在JTable中显示) 游戏 至于编码问题,我使用以下方法成功检索了表中包含的数据: public List<Game> getGames(){ List<Game> games; try{ TypedQuery<Game> selectGamesQuery = entityManager.createQuery("SELECT g FROM Game g",Game.class); games = selectGamesQuery.getResultList(); } catch(Exception e) { System.out.println(e); } return games; } 这成功地返回了我可以迭代的游戏列表. 然后,在我看来,我有以下几点 JScrollPane scrollPane = new JScrollPane(); contentPane.add(scrollPane,BorderLayout.CENTER); tblGames = new JTable(new tblGamesModel()); tblGames.setShowVerticalLines(true); tblGames.setShowHorizontalLines(true); tblGames.setFillsViewportHeight(true); scrollPane.setViewportView(tblGames); 哪一个导致我们进入桌面模型,这就是我被困住的地方. public class tblGamesModel extends AbstractTableModel { private GameRepository gameRepository; private List<Game> games; /** * */ public tblGamesModel(){ gameRepository = new GameRepository(); games = gameRepository.getGames(); } private static final long serialVersionUID = 1L; @Override public int getColumnCount() { // TODO Auto-generated method stub return 0; } @Override public int getRowCount() { // TODO Auto-generated method stub return games.size(); } @Override public Object getValueAt(int arg0,int arg1) { // TODO Auto-generated method stub return null; } } 我知道这是一个简单的帖子的代码很多,但我真的不知道如何显示当前的问题.任何好的链接都可以提供帮助,也可以自行提供建议. 感谢您花时间阅读代码并可能帮助我. 请记住,我只是一个学生编程,所以我还有很多关于约定等等的知识.所以我们也欢迎指点,因为我渴望向更有经验的开发人员学习. 解决方法
最简单的选择是这样的:
@Override public int getColumnCount() { return 5; } ... @Override public Object getValueAt(int rowIndex,int columnIndex) { Game game = games.get(rowIndex); switch (columnIndex) { case 0: return game.getId(); case 1: return game.getTitle(); case 2: return game.getPublisher(); case 3: return game.getGenre(); case 4: return game.getReleaseDate(); } return null; } 由于所有神奇的数字,这可能容易出现维护问题 – 解决方案是使用列的枚举: enum GameTableColumn { ID,TITLE,PUBLISHER,GENRE,RELEASE_DATE; } 然后使用GameTableColumn.values()[columnIndex]获取列的枚举实例. 一些样式注释 – tblGamesModel是Java类的非标准名称,类名始终以大写字母开头.更多的Java名称是GamesTableModel.通常不鼓励匈牙利表示法前缀(例如“tbl”). 在构造函数中进行数据库提取通常也是一个坏主意.在Swing应用程序中,您希望所有提取都是显式的,这样您就可以确保它们不会阻止UI.而不是getGames()我会建议retrieveGames().最好在表模型之外构造GamesRepository并将其传递给构造函数.然后,您可以先在另一个线程中执行JPA查询.这将阻止UI线程在数据库访问进行时冻结. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |