Joe*_*ing 3 java swing jpa jtable populate
我试图寻找合适的答案,但到目前为止没有任何帮助.我对java GUI编程很新,实际上,对于java本身.但是我有经理要了解JPA,如何使用JPA检索,插入和删除.
现在我希望我的数据库中的数据显示在JTable中.
我目前有以下mySQL表(我希望在JTable中显示)
游戏Id PK int Title Publisher Genre ReleaseDate
至于编码问题,我使用以下方法成功检索了表中包含的数据:
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;
}
Run Code Online (Sandbox Code Playgroud)
这成功地返回了我可以迭代的游戏列表.
然后,在我看来,我有以下几点
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);
Run Code Online (Sandbox Code Playgroud)
哪一个导致我们进入桌面模型,这就是我被困住的地方.
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;
}
Run Code Online (Sandbox Code Playgroud)
}
我知道这是一个简单的帖子的代码很多,但我真的不知道如何显示当前的问题.任何好的链接都可以提供帮助,也可以自行提供建议.
感谢您花时间阅读代码并可能帮助我.
请记住,我只是一个学生编程,所以我有很多东西可以学习约会等.所以我们也欢迎指点,因为我渴望向更有经验的开发人员学习.
最简单的选择是这样的:
@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;
}
Run Code Online (Sandbox Code Playgroud)
由于所有神奇的数字,这可能容易出现维护问题 - 解决方案是使用列的枚举:
enum GameTableColumn {
ID, TITLE, PUBLISHER, GENRE, RELEASE_DATE;
}
Run Code Online (Sandbox Code Playgroud)
然后使用GameTableColumn.values()[columnIndex]获取列的枚举实例.
一些样式注释 - tblGamesModel是Java类的非标准名称,类名始终以大写字母开头.更多的Java名称是GamesTableModel.通常不鼓励匈牙利表示法前缀(例如"tbl").
在构造函数中进行数据库提取通常也是一个坏主意.在Swing应用程序中,您希望所有提取都是显式的,这样您就可以确保它们不会阻止UI.而不是getGames()我会建议retrieveGames().最好在表模型之外构造GamesRepository并将其传递给构造函数.然后,您可以先在另一个线程中执行JPA查询.这将阻止UI线程在数据库访问进行时冻结.