java - 在 Gridlayout Java Swing 中显示数组列表项
问题描述
我一直在尝试使用 DAO 方法在我的网格布局中显示一组项目。我浏览了几个 SO 线程以寻找相关答案,但找不到任何答案。
我从 mysql 数据库中获取数据,然后将其绑定到 DAO 对象。
这就是我所期待的
这就是我得到的。
基本上,我从 mysql 数据库中获取数据并将其绑定到 DAO 对象。
以下是我的代码。谢谢。
ItemDao.java
public class ItemDAO {
private Connection connection;
private Statement statement;
public ItemDAO() { }
public List<Item> getItems() throws SQLException {
String query = "SELECT * FROM tbl_items";
List<Item> list = new ArrayList<>();
Item item;
ResultSet rs = null;
try {
connection = ConnectionFactory.getConnection();
statement = connection.createStatement();
rs = statement.executeQuery(query);
while (rs.next()) {
item = new Item();
/*Retrieve one auction item
and store it in auction object*/
item.setItemId(rs.getInt("it_id"));
item.setItemName(rs.getString("it_name"));
item.setTimestamp(rs.getString("it_timeout"));
item.setLowBid(rs.getInt("it_lowbid"));
item.setBidHistory(rs.getInt("it_bidhistory"));
item.setImage(rs.getBytes("it_image"));
//add each employee to the list
list.add(item);
}
} finally {
DbUtil.close(rs);
DbUtil.close(statement);
DbUtil.close(connection);
}
return list;
}
}
项目面板.Java
public final class ItemPanel extends JPanel {
private JPanel centerPanel;
private JPanel gridView;
private HoverButton btnImg;
private static ImageIcon itemImage;
private static JLabel imgLabel;
private static JLabel itemTxt;
public ItemPanel() {
initComponents();
getItems();
//initGridLayout();
Logy.d("Item panel initialized");
}
private void initComponents() {
// Center Panel
centerPanel = new JPanel();
setBackground(new java.awt.Color(255, 255, 255));
gridView = new JPanel(new GridLayout(5, 5, 10, 20));
gridView.setPreferredSize(new Dimension(650, 820));
gridView.setBackground(Color.WHITE);
// Base Panel for Grid buttons
btnImg = new HoverButton("");
btnImg.setLayout(new BorderLayout());
// Inner Panel for button child components
JPanel btnPanel = new JPanel();
btnPanel.add(btnImg);
// Add Image to a Label
imgLabel = new JLabel();
// Inner Text Label
itemTxt = new JLabel();
itemTxt.setHorizontalAlignment(SwingConstants.CENTER);
itemTxt.setPreferredSize(new Dimension(10, 20));
itemTxt.setOpaque(true);
itemTxt.setBackground(new Color(215, 219, 226));
// Add child components to Grid Buttons
btnImg.add(imgLabel, BorderLayout.CENTER);
btnImg.add(itemTxt, BorderLayout.SOUTH);
// Add Button to Grid
gridView.add(btnImg);
// Add Grid to the Center Panel
centerPanel.add(gridView);
// Add center panel to Base Panel
add(centerPanel);
}
private static void getItems() {
ItemDAO itemDao = new ItemDAO();
List<Item> items;
try {
items = itemDao.getItems();
for (Item item : items) {
displayItems(item);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void displayItems(Item item) {
// Button Image
itemImage = new ImageIcon(new ImageIcon(item.getImage()).getImage()
.getScaledInstance(150, 110, Image.SCALE_SMOOTH));
// set button image
imgLabel.setIcon(itemImage);
// Button Text
itemTxt.setText(item.getItemName());
}
解决方案
您需要JButton
为每个项目构造一个新实例,并将其添加到网格中:
class ItemPanel extends JPanel {
private JPanel gridView;
public ItemPanel() {
initComponents();
getItems();
}
private void initComponents() {
setBackground(new java.awt.Color(255, 255, 255));
gridView = new JPanel(new GridLayout(5, 5, 10, 20));
gridView.setBackground(Color.WHITE);
add(gridView);
}
private void getItems() {
ItemDAO itemDao = new ItemDAO();
List<Item> items= itemDao.getItems();
for (Item item : items) {
displayItems(item);
}
}
private void displayItems(Item item) {
ImageIcon itemImage = new ImageIcon(item.getImage().getScaledInstance(150, 110, Image.SCALE_SMOOTH));
JLabel imgLabel = new JLabel();
imgLabel.setIcon(itemImage);
JLabel itemTxt = new JLabel(item.getItemName());
itemTxt.setHorizontalAlignment(SwingConstants.CENTER);
itemTxt.setBackground(new Color(215, 219, 226));
JButton btnImg = new JButton("");
btnImg.setLayout(new BorderLayout());
btnImg.add(imgLabel, BorderLayout.CENTER);
btnImg.add(itemTxt, BorderLayout.SOUTH);
// Add Button to Grid
gridView.add(btnImg);
}
}
您可以使用mre 在线测试它。
旁注:发布时始终考虑
推荐阅读
- python - 对于这个例子,如何在 pandas 中创建一个数据透视表?
- java - 使用 POST 从 Java 发送文件
- qt - 将 QML 与 qt 小部件类型的 ui 表单一起使用?
- firebase - Flutter:监听firebase快照时如何返回bool值?
- sql - SQL 上次日期时间值
- postgresql - 在 PostgreSQL 的递归查询函数中使用 PERFORM
- python-3.x - 无法让 .exe 在其他机器上执行 - “No module named serial”错误
- android - 错误:flutter/lib/ui/ui_dart_state.cc(148) 未处理的异常
- reactjs - 使用 ReactStrap 的模态组件
- tensorflow - Tensorflow 估计器无法收敛从 Keras 转换的模型(使用 binary_crossentropy 时)