【发布时间】: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 会给出需要抽象类的错误它。感谢您能给我的任何帮助。
【问题讨论】:
-
在制作自定义组件时,您宁愿将
JComponent作为基类 -
您说您想创建一个具有 jbutton 功能的自定义组件。好的,这是有道理的。但是你为什么不简单地扩展 JButton 类并覆盖你想要重新工作的所有东西呢?这将是这里最安全的选择。
-
"..想要创建自己的按钮类而不是使用 JButton。" 为什么?
-
@AndrewThompson:你怀疑这个问题实际上是XY Problem 类型的问题吗?对于原始海报,请查看此链接以了解我在说什么。当最好的解决方案实际上可能是完全使用不同的方法时,您目前正在询问“我该如何解决这个代码问题”。考虑告诉我们您正在尝试解决的总体问题,而不是您当前尝试解决的方式。
-
@HovercraftFullOfEels 简而言之,是的。
标签: java swing jframe jpanel mouseevent