0
for(int k=0;k< dtm.getRowCount();k++) //dtm is object of default table model
{
    if(String.valueOf(dtm.getValueAt(k,1)).equalsIgnoreCase("Today") && check==0 )
    {
        cnt++;

        JLabel jp=new JLabel();
        panel.add(jp);
        panel.setLayout(null);

        if(cnt<=12)
        {
        jp.setBounds(j,500,100,100);
        j=j+115;

                jp.addMouseListener(this);
        }
        else
        {
            j=j-115;
            jp.setBounds(j,400,100,100);
        }
        String b="<html><body text=#FDFA0B>"+String.valueOf(dtm.getValueAt(k,0))+"'s Birthday";
        jp.setText(b);
        jp.setFont(new java.awt.Font("comicbd",Font.ITALIC+Font.BOLD, 14));


    }
}

它不起作用 mouselister 仅适用于最后放置的标签...我想为所有标签应用鼠标侦听器我该怎么做..请帮助我....

4

3 回答 3

1

您当然可以将相同的内容添加MouseListener到多个组件中 - 这是一个最简单形式的示例:

    MouseListener ml = new MouseListener() {
        @Override
        public void mouseReleased(MouseEvent e) {System.out.println("Released!");}

        @Override
        public void mousePressed(MouseEvent e) {System.out.println("Pressed!");}

        @Override
        public void mouseExited(MouseEvent e) {System.out.println("Exited!");}

        @Override
        public void mouseEntered(MouseEvent e) {System.out.println("Entered!");}

        @Override
        public void mouseClicked(MouseEvent e) {System.out.println("Clicked!");}
    };

    JLabel j1 = new JLabel("Label1");
    j1.addMouseListener(ml);
    JLabel j2 = new JLabel("Label2");
    j2.addMouseListener(ml);

但是根据您的代码,您正在弄乱 JTable - JTable 的行为与您的想法不同。您尝试编辑的标签实际上是 TableCellEditor 的一部分。JTable 使用单个 TableCellEditor(读取:单个 JLabel)来显示 JTable 中的每个单元格。这就是为什么您只看到监听器应用于最后一个单元格(因为那是唯一一个最后一个单元格不再具有完整组件的原因 - 其余的只是之前应用该组件的位置的幽灵)。

好消息是您可以在 中添加一个MouseListenerJTable并从那里获取信息:

    final JTable table = new JTable();
    MouseListener ml = new MouseListener() {
        @Override
        public void mouseReleased(MouseEvent e) {
            System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
        }

        @Override
        public void mousePressed(MouseEvent e) {
            System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
        }

        @Override
        public void mouseExited(MouseEvent e) {
            System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
        }

        @Override
        public void mouseEntered(MouseEvent e) {
            System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
        }

        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
        }
    };

    table.addMouseListener(ml);
于 2012-08-03T15:44:33.040 回答
1

如果没有 SSCCE,我可以告诉您,您要在 3 个条件下添加侦听器:

  • String.valueOf(dtm.getValueAt(k,1)).equalsIgnoreCase("Today")
  • check == 0
  • if(cnt<=12)

其他JLabel的(不通过这些条件的)没有分配你的听众。

确保您点击了正确的标签。

jp.addMouseListener(this);JLabel创建后立即移动(如果您想将侦听器添加到所有JLabels)。

于 2012-08-03T14:33:25.063 回答
0

一种选择是添加另一个内部类:

     class MListener extends MouseAdapter{
         public void mouseReleased(MouseEvent e) {}
         //other mouse evetns
     }

然后而不是:

jp.addmousListener(this);

做:

jp.addMouseListener(new MListener());
于 2012-08-03T14:31:44.400 回答