如何获取从结果集中的值动态创建的特定Jlabel的名称。使用JPop菜单项?

时间:2019-03-26 02:07:00

标签: java swing netbeans

我正在创建一个餐厅菜单,我正在使用resultSet中的值为每个条目动态创建JLabel。现在,我想使用菜单项JPopupMenu获取特定Jlabel的ID。我在菜单项上添加了ActionListener,但是它返回的所有Jlabel而不是特定Jlabel的ID。有人可以帮我吗。我已经附上了下面的代码。

private void fillPanel() {

Integer id;

MenuDAOImpl menuDAOImpl = new MenuDAOImpl();

resultSet = menuDAOImpl.getAllMenuItems();


    try {
            while(resultSet.next()){

        ImageIcon img = new ImageIcon(resultSet.getString("item_img"));
                 JLabel label = new JLabel(img);
                 label.setText(resultSet.getString("item_name"));
                 label.setFont(new Font("Verdana", Font.BOLD, 11));
                 label.setHorizontalTextPosition(SwingConstants.CENTER);
                 label.setVerticalTextPosition(SwingConstants.BOTTOM);
                 id = resultSet.getInt("item_id");
                 label.setName(id.toString());
                 label.addMouseListener(new MouseListener() {

        public void mouseClicked(MouseEvent e) {
            System.out.println(label.getName());
          }

        @Override
        public void mousePressed(MouseEvent me) {}
        @Override
        public void mouseEntered(MouseEvent me) {}
        @Override
        public void mouseExited(MouseEvent me) {}
        @Override
        public void mouseReleased(MouseEvent evt) {
        if (evt.isPopupTrigger()){          
            JLabel source = (JLabel)evt.getSource();
            menuItemPopup.show(evt.getComponent(), evt.getX(), evt.getY());
               } 

             }

            }); 

          // This is the menu item in JpopupMenu
 // This method below is returning Id of every Jlabel created.
            updateMenuItem.addActionListener(new ActionListener(){ 
                 public void actionPerformed(ActionEvent e){
                     System.out.println(label.getName());
                 }


             });
            menuItem.add(label);
            }  

        } catch (SQLException ex) {
            Logger.getLogger(MenuFrame.class.getName()).log(Level.SEVERE, null, ex);
        }


        menuItem.revalidate();
        menuItem.repaint();
    }
}

1 个答案:

答案 0 :(得分:0)

如果要动态创建对象,则需要创建通用侦听器。这些侦听器应在循环外部创建,并由您创建的所有组件共享。

此外,还设计了JPopuMenu与JMenuItmes一起使用。一个JMenuItem支持图标,然后将一个ActionListener添加到菜单项中,以处理该项目的鼠标单击。

所以通用的侦听器看起来像:

ActionListener al = new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        JMenuItem menuItem = (JMenuItem)e.getSource();
        System.out.println( menuItem.getName() );
    }
}

在开始循环代码之前,先创建侦听器。

然后在循环代码中执行以下操作:

while(resultSet.next())
{
    JMenuItem menuItem = new JMenuItem(...);
    ...
    Integer id = resultSet.getInt("item_id");
    menuItem.setName(id.toString());
    menuItem.addActionListener( al );
}