【问题标题】:How can I get mouse pressed event in java on a buttonjava - 如何在按钮上获得鼠标按下事件
【发布时间】:2018-06-11 11:03:58
【问题描述】:

我正在用 Java 创建一个程序,并且想创建自己的按钮类,而不是使用 JButton。我已经整理出了所有的美学,但我不确定如何在 Java 中获得鼠标按下事件。 这是我的代码:

// Button.java
package cella;

import java.awt.Color;
import java.awt.Point;
import java.awt.Graphics;

import java.awt.event.MouseEvent;

public class Button extends MouseAdapter {
    int x, y, w, h;
    String ph, val;
    boolean mouseDown;
    Color LIGHTGRAY = new Color(200, 200, 200);
    public Button(int xt, int yt, int wt, int ht, String pht, String valt) {
        x = xt;
        y = yt;
        w = wt;
        h = ht;
        ph = pht;
        val = valt;
        mouseDown = false;
    }

    public void draw(Graphics g, Point mouse) {
        if (contains(mouse)) {
            g.setColor(Color.GRAY);
        } else {
            g.setColor(LIGHTGRAY);
        }
        g.fillRect(x, y, w, h);
        g.setColor(Color.BLACK);
        g.drawRect(x, y, w, h);
        g.drawString(ph, x + 5, y + h - 5);
    }   

    private boolean contains(Point pos) {
        if (pos.x > x && pos.x < x + w && pos.y > y && pos.y < y + h) {
            return true;
        } else {
            return false;
        }
    }
    public boolean pressed(Point pos) {
        if (contains(pos) && mouseDown) {
            System.out.println("Pressed");
            return true; 
        }
        else return false;
    }
}

当鼠标按下时布尔 mouseDown 将设置为 true,然后在释放时设置为 false 但是我找不到捕获这些事件的方法,当我尝试实现时,mouseListener 会给出需要抽象类的错误它。感谢您能给我的任何帮助。

Full code

【问题讨论】:

  • 在制作自定义组件时,您宁愿将JComponent 作为基类
  • 您说您想创建一个具有 jbutton 功能的自定义组件。好的,这是有道理的。但是你为什么不简单地扩展 JButton 类并覆盖你想要重新工作的所有东西呢?这将是这里最安全的选择。
  • "..想要创建自己的按钮类而不是使用 JButton。" 为什么?
  • @AndrewThompson:你怀疑这个问题实际上是XY Problem 类型的问题吗?对于原始海报,请查看此链接以了解我在说什么。当最好的解决方案实际上可能是完全使用不同的方法时,您目前正在询问“我该如何解决这个代码问题”。考虑告诉我们您正在尝试解决的总体问题,而不是您当前尝试解决的方式。
  • @HovercraftFullOfEels 简而言之,是的。

标签: java swing jframe jpanel mouseevent


【解决方案1】:

试试这个。

JButton button = new JButton("Click!");

button.addMouseListener(new MouseAdapter() {
  public void mouseClicked(MouseEvent e) {
    if (e.getButton() == MouseEvent.NOBUTTON) {
      textArea.setText("No button clicked...");
    } else if (e.getButton() == MouseEvent.BUTTON1) {
      textArea.setText("Button 1 clicked...");
    } 

  }
});

查看可用的methods

希望对您有所帮助!

【讨论】:

  • 我知道JButton,我想制作自己的按钮类来拥有自己的图形等
  • 还是谢谢
  • @ThomasAyling 请检查stackoverflow.com/questions/2158/…
  • 您可以通过扩展 JButton 类来创建自己的自定义类。谢谢
  • 你确定吗? JButton 类提供选项来设置其变量以使其自定义。此外,如果您真的想添加更多功能,您可以扩展该类。但是,如果只是出于美观的原因,JButton 已经允许进行良好的自定义,不建议重新发明轮子
【解决方案2】:

您可以为处理事件的按钮添加一个侦听器。

JButton button = new JButton("Click for Stuff");

button.addMouseListener(new MouseAdapter() {
  public void mouseClicked(MouseEvent e) {
    switch(e.getButton())
     { 
      case MouseEvent.NOBUTTON : // do stuff on button release
           break;
      case MouseEvent.BUTTON1 : // do stuff on click
           break;

     }
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多