在 Gridlayout Java Swing 中显示数组列表项 [英] Display arraylist items in Gridlayout Java Swing

查看:60
本文介绍了在 Gridlayout Java Swing 中显示数组列表项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用 DAO 方法在我的网格布局中显示一系列项目.我浏览了几个 S.O 线程以寻找相关答案,但找不到任何答案.

I have been trying to display an array of items in my gridlayout using DAO approach. I went through several S.O threads in search for a related answer but couldn't find any.

我从 mysql 数据库中获取数据,然后将其绑定到 DAO 对象.

I get my data from mysql database and then binds it to a DAO Object.

这是我期待的

这就是我得到的.

基本上,我从 mysql 数据库获取数据并将其绑定到 DAO 对象.

Basically, i get the data from mysql database and bind it to a DAO Object.

以下是我的代码.谢谢.

Below are my codes. Thanks.

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 实例,并将其添加到网格中:

You need to construct a new JButton instance for each item, and add it to the grid:

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对其进行测试.

You can test it using this on line mre.

mre或者sccee.就像链接的一样.

mre or sccee. like the linked one.

这篇关于在 Gridlayout Java Swing 中显示数组列表项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆