【问题标题】:Multiple JLabel MouseListeners多个 JLabel MouseListeners
【发布时间】:2012-04-28 22:03:03
【问题描述】:

我正在尝试将几个 JLabel 添加到 JPanel 以及使用循环的鼠标侦听器。这些 JLabel 将具有鼠标侦听器,以便在单击时更改其图标(使用 label.setIcon())。但是,我一次只想“选择”一个。因此,我需要他们知道何时单击了另一个标签,以便它知道在选择新标签之前自行关闭。但是,我的问题是,因为我使用循环添加这些标签,所以它们都具有相同的 MouseListener。

谁能教我一个简单的方法来完成这个?

【问题讨论】:

  • 到目前为止你做了什么?请发布一些代码。

标签: java image swing jpanel jlabel


【解决方案1】:

这是一个简短的示例,您如何实现它(请注意,我没有使用图标,而是更改了标签):

public class MouseListenerExample extends JFrame {

    public static class MyMouseListener extends MouseAdapter {
        private static final Collection<JLabel> labels = new ArrayList<JLabel>();
        private final JFrame frame;

        public MyMouseListener(JFrame frame, JLabel label) {
            this.frame = frame;
            labels.add(label);
        }

        @Override
        public void mouseClicked(MouseEvent e) {
            for (JLabel label : labels) {
                String text = label.getText();
                if (text.startsWith("X ")) {
                    label.setText(text.substring(2));
                }
            }
            JLabel currentLabel = (JLabel) e.getComponent();
            currentLabel.setText("X " + currentLabel.getText());
        }

    }

    public MouseListenerExample() {
        super("MouseListener Example");
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        for (int i = 0; i < 10; i++) {
            JLabel jLabel = new JLabel("Label " + i);
            c.add(jLabel);
            jLabel.addMouseListener(new MyMouseListener(this, jLabel));
        }
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new MouseListenerExample();
    }
}

主要思想是,您为每个标签创建一个新的MouseListener,但在每个侦听器的范围之外保留一个标签列表(在此示例中,我只使用一个static 变量,但您也可以有一个包含框架中标签列表的字段。

【讨论】:

    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多