-2

我不知道如何将 mouseListener(mouseClicked、mouseEntered 等...)添加到我的 actionPerformed。我只学习了如何从 JButton 添加操作,但 mouseListener 在 JLabel 中。

这是这段代码:

test = new JLabel (ikona);
    test.setBounds(200, 200, 100, 100);
    add(test);
    test.addMouseListener(new MouseListener()
    {

        public void mouseClicked(MouseEvent e) {
            System.out.println(ikona2);

        }

        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

和:

public void actionPerformed(ActionEvent arg0) 
{
    Object Zrodlo = arg0.getSource();
    if (Źródło==przycisk)
    {
    wyswietlacz.setText(new Date().toString());
    //System.out.println(new Date());
    }
    else if (Zrodlo==przycisk2)
    {
        dispose();
    }
    else if (Zrodlo==przycisk3)
    {
    wyswietlacz.setText(new Date().toString());
    }
    else if (Zrodlo==test)
    {
        wyswietlacz.setText("");
    }

“przycsik、przycisk2、przycisk3”是 JButton,我尝试用 JLAbel(“测试”)做一些事情,但我不知道如何解决这个问题。

PS对不起我的英语...

编辑:对于 JButton,我使用它来查看我的 JFrame 中的操作:

public void actionPerformed(ActionEvent arg0) 
{
    Object Zrodlo = arg0.getSource();
    if (Źródło==przycisk)
    {
    wyswietlacz.setText(new Date().toString());
    //System.out.println(new Date());
    }
    else if (Źródło==przycisk2)
    {
        dispose();
    }

我想对我的 JLabel 和 mouseListener 做同样的事情。我想查看哪个鼠标/光标哪个 MouseListener 的交互。我想将 icon(gif) 添加到 JLabel 并使用 MouseListener 将 icon1 更改为 icon2 示例 mouseClicked 或 mousePressed。如果我使用:

test.addMouseListener(new MouseListener()
    {

        public void mouseClicked(MouseEvent e) {
            System.out.println(ikona2);

        }

我只在我的 Eclipse 控制台中看到我的“ikona2”的源代码。我想在我的 JFrame 中看到动作。

4

3 回答 3

2

不确定我是否理解这个问题,但您可以像 JLabel 一样绘制 JButton 但仍然让 ActionListener 像按钮一样工作:

JButton button3 = new JButton("Label Button");
button3.setBorderPainted(false);
button3.setContentAreaFilled(false);
button3.addActionListener( ... );
于 2013-07-01T22:34:50.083 回答
2

侦听器是一种遵循观察者模式的回调,发生某些事情时,您会收到通知。

对于许多不同类型的事件,有许多类型的侦听器。按钮具有ActionListener至少由用户在按钮具有焦点时单击或按下回车键或空格来触发的。

标签没有ActionListener,标签是用于所有预期目的的静态组件,但是,标签确实有MouseListener...

MouseListener listener = ...;
JLabel label = new JLabel("This is a clickable lable");
label.addMouseListener(listener);

这将允许您监视何时在标签上单击鼠标。

看一眼:

更多细节

于 2013-07-01T23:37:12.570 回答
0

您不能组合这两个动作侦听器(MouseListener 和 ActionListener)。您可以在 JLabel 以及 JButton 上添加 MouseListener。无论如何都不允许向 JLabel 添加 ActionListener。您可以做的是创建一个 MouseListener 来处理 JLabel 以及 JButton 的事件。这是一个例子:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JLabel;

public class MouseListenerTest extends javax.swing.JFrame {
    private static final long serialVersionUID = 3109442737770802801L;

    public static void main(String[] args) {
        MouseListenerTest t = new MouseListenerTest();
        t.setLayout(new BorderLayout());

        MyMouseListener mouseListener = new MyMouseListener();
        JLabel l = new JLabel("JLabel");
        l.setPreferredSize(new Dimension(200, 100));
        JButton b = new JButton("JButton");
        b.setPreferredSize(new Dimension(200, 100));

        l.addMouseListener(mouseListener);
        b.addMouseListener(mouseListener);

        t.add(l, BorderLayout.CENTER);
        t.add(b, BorderLayout.SOUTH);

        t.pack();
        t.setVisible(true);
    }
}

class MyMouseListener implements MouseListener {

    @Override
    public void mouseClicked(MouseEvent e) {
        Object o = e.getSource();
        if (o instanceof JButton) {
            System.out.println("JButton");
        } else if (o instanceof JLabel) {
            System.out.println("JLabel");
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {/* TODO */
    }

    @Override
    public void mouseReleased(MouseEvent e) {/* TODO */
    }

    @Override
    public void mouseEntered(MouseEvent e) {/* TODO */
    }

    @Override
    public void mouseExited(MouseEvent e) {/* TODO */
    }
}
于 2013-07-01T22:08:40.550 回答