【问题标题】:How to add MouseListener to actionPerformed?如何将 MouseListener 添加到 actionPerformed?
【发布时间】:2013-06-29 02:14:09
【问题描述】:

我不知道如何将 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 ("test") 做一些事情,但我不知道如何解决这个问题。

附:对不起我的英语......

编辑:对于 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 中查看操作。

【问题讨论】:

  • 在更高的层面(就最终用户交互而言)解释您想要实现的目标。
  • 不清楚你到底在追求什么
  • 它认为如果您至少将变量名称(例如使用谷歌翻译)翻译成英文会很有用。
  • 我不确定,但听起来您想创建一个由 actionPerformed() 和鼠标侦听器调用的通用函数。
  • na przyszlosc - Koduj w ANGIELSKIM nie POLSKIM。 Wtedy o wiele wieksza mozliwosc udostepniania komus kodu (ze zrozumieniem) 一个 takze otrzymania pomocy przy kodzie。娜玛莉丝; Postaraj sie napisac po ANGIELSKU co chcesz zeby twoj kod robil, mniejwiecej chociaz

标签: java swing actionlistener jlabel mouse-listeners


【解决方案1】:

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

JButton button3 = new JButton("Label Button");
button3.setBorderPainted(false);
button3.setContentAreaFilled(false);
button3.addActionListener( ... );

【讨论】:

    【解决方案2】:

    侦听器是observer pattern 之后的一种回调类型,发生某些事情时,您会收到通知。

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

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

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

    这将允许您在标签上发生鼠标点击时进行监控。

    看看:

    更多详情

    【讨论】:

      【解决方案3】:

      您不能组合这两个动作侦听器(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 */
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        • 1970-01-01
        相关资源
        最近更新 更多