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


    }
}

マウスリスターは最後に配置されたラベルにのみ適用されます...すべてのラベルにマウスリスナーを適用したいのですが、どうすればいいですか..助けてください....

4

3 に答える 3

1

SSCCE がなければ、次の 3 つの条件でリスナーを追加していると言えます。

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

JLabelの (これらの条件を満たさない) にはリスナーが割り当てられていません。

正しいラベルをクリックしていることを確認してください。

または、作成jp.addMouseListener(this);直後に移動しJLabelます (すべてJLabelの にリスナーを追加する場合)。

于 2012-08-03T14:33:25.063 に答える
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);
于 2012-08-03T15:44:33.040 に答える
0

1 つのオプションは、別の内部クラスを追加することです。

     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 に答える