簡體   English   中英

將鼠標偵聽器添加到多個JLabel

[英]Adding Mouse listener to multiple JLabel

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只適用於最后放置的標簽...我想為所有標簽應用鼠標監聽器我該怎么辦...請幫助我....

沒有SSCCE,我可以告訴你,你在3個條件下添加了監聽器:

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

其他JLabel (未通過這些條件)尚未分配您的監聽器。

確保單擊正確的標簽。

或者移動jp.addMouseListener(this); JLabel創建之后(如果你想為所有JLabel添加監聽器)。

你當然可以將相同的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中的每個單元。 這就是為什么你只看到Listener應用於最后一個單元格的原因(因為那是唯一的最后一個單元格已經有一個完整的組件 - 其余的只是之前應用組件的鬼魂)。

好消息是你可以將一個MouseListener添加到JTable ,並從那里獲取信息:

    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);

一個選項是添加另一個內部類:

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

然后是:

jp.addmousListener(this);

做:

jp.addMouseListener(new MListener());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM