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只适用于最后放置的Label ... 我想为所有标签应用鼠标监听器,我该怎么做呢 请帮帮我....
答案 0 :(得分:1)
如果没有SSCCE,我可以告诉你,你在3个条件下添加了监听器:
String.valueOf(dtm.getValueAt(k,1)).equalsIgnoreCase("Today")
check == 0
if(cnt<=12)
其他JLabel
(未通过这些条件)尚未分配您的听众。
确保您点击了正确的标签。
或者在创建jp.addMouseListener(this);
之后移动JLabel
(如果您想为所有JLabel
添加监听器。)
答案 1 :(得分: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中的每个单元。这就是为什么你只看到监听器应用于最后一个单元格的原因(因为那是唯一一个最后一个单元格不再具有完整组件 - 其余的只是之前应用组件的鬼魂)。
好消息是,您可以向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);
答案 2 :(得分:0)
一个选项是添加另一个内部类:
class MListener extends MouseAdapter{
public void mouseReleased(MouseEvent e) {}
//other mouse evetns
}
然后而不是:
jp.addmousListener(this);
做的:
jp.addMouseListener(new MListener());