我正在创建一个餐厅菜单,我正在使用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();
}
}
答案 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 );
}