簡體   English   中英

如何使用 MouseListener 單擊 JLabel?

[英]How do I click a JLabel using MouseListener?

我正在嘗試為我的世界制作這個程序,現在我才剛剛開始。 我希望如果你點擊一個標簽,它會檢查它是什么標簽並會做一些事情。

addMouseListener(new MouseAdapter() { 
          public void mousePressed(MouseEvent me) { 

            System.out.println(me.getX()+", "+me.getY()+"."); 
            Object source = me.getSource();
            int intx =  me.getX();
            int inty = me.getY();

            if(me.getX()>=1 && me.getY()>=1 && me.getX()<=70 && me.getY()<=45){
                permissionsframe.setLocation(810,250);
                System.out.println(p1p.length);
                permissionsframe.pack();
                permissionsframe.setSize(200, 200);
                permissionsframe.setVisible(true);
                JLabel playerperms = new JLabel("Player "+p1s+" has "+p1p.length+" permissions.");
                playerperms.setBounds(1, 1, 150, 150);
                permissionsframe.add(playerperms);
                System.out.println("You chose "+player1.getText()+".");
            }
            else{
                System.out.println("You did not click any label.");
            }

        }
    });

這個選擇區域適應了我現在的名字——NonameSL。 但是如果名稱更長或更短,則選擇區域顯然會有所不同......

有沒有辦法獲得精確的標簽? 我試過if(source.equals(player1)) (玩家 1 是標簽),但我將標簽放在 1, 1 中,我必須單擊我在其中定義標簽的精確點,X=1, Y=1。 如何讓鼠標偵聽器收聽標簽?

無需檢查鼠標坐標是否在JLabel中。 您可以將一個Listener綁定到每個JLabel上的MyMouseListener.class中的click / press事件MyMouseListener.class

為此:

您必須將MouseListener添加到每個JLabel:

MyMouseListener myMouseListener = new MyMouseListener();

label01.setName("name01");
label01.addMouseListener(myMouseListener);

label02.setName("name02");
label02.addMouseListener(myMouseListener);

要標識JLabel,您可以執行以下操作:

class MyMouseListener extends MouseAdapter {

    @Override
    public void mouseClicked(MouseEvent e) {
         JLabel l = (JLabel) e.getSource();

         if(l.getName().equals("name01"))
             doSomething01();
         else if(l.getName().equals("name02"))
             doSomething02();
    }
}

正確的方法是使用.getComponent()方法而不是.getSource()因為這是MouseEvent ,它不同於ActionEvent

為您的類實現監聽器:

public class Main implements MouseListener {

public static void main(String[] args) {
    
    //setup JFrame and some label and then 

    label.addMouseListener(this);
}

@Override
    public void mousePressed(MouseEvent e) {
        if (e.getComponent().equals(label)) {

        System.out.println("clicked");
    }
}
//the other orderride methods..

暫無
暫無

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

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