我一直在尝试使用DAO方法在我的网格布局中显示一系列项目。我经历了多个S.O线程来寻找相关答案,但找不到任何答案。
我从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;
}
}
ItemPanel.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);
}
}
您可以使用此on line mre进行测试。