我们用4个JLabel制作2x2网格。我想在单击一个字段和其他内容时,在另一个字段上释放鼠标时(或在同一字段上释放时,则相同)显示JLabel(字符串)的内容。

在为每个字段(x; y)提供坐标的for子句中,我可以使用实际位置,同时使用此循环创建坐标

for (int y = s - 1; y >= 0; y--) { //starting with int s,v = 2
for (int x = 0; x < v; x++) {
  field[x][y] = new JLabel((x) + ";" + (y));
  field[x][y].setName((x) + ";" + (y));


使用添加一个侦听器

field[x][y].addMouseListener(new myMouseListener());


并在我的类mousePressed中获得这样的setName()

Component c = e.getComponent();
sysout(c.getName());


...鼠标中的相同内容

d = e.getComponent();
System.out.println(d.getName());


从理论上讲,当释放鼠标时,我应该获得不同的坐标,但是与按下鼠标时,我总是得到相同的坐标。

例如:c.getName()返回3; 2 AND d.getName()返回3; 2

我该如何更改?

最佳答案

更少的是,此演示演示了如何解决您的问题:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class JLabelsDemo {

    JFrame frame = new JFrame();
    JLabel[][] label = new JLabel[2][2];
    GridLayout gridLayout = new GridLayout(2, 2, 10, 10);

    public JLabelsDemo() {

        frame.setLayout(gridLayout);
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                label[i][j] = new JLabel("");
                label[i][j].setOpaque(true);
                label[i][j].setBackground(Color.red);
                final String msg = "JLabel " + i + "," + j;
                label[i][j].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        JOptionPane.showMessageDialog(null, msg);
                    }

                });
                frame.add(label[i][j]);
            }

        }
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //frame.pack();
        frame.setSize(320, 240);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JLabelsDemo();
            }
        });
    }
}


但是,我的建议是不要使用JLabels作为可单击的组件。而是使用JButton,因为它更容易实现事件侦听器。

关于java - 一次使用两个MouseListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22180879/

10-12 22:53
查看更多