Java mouseEntered将不会执行
我试图做一个mouseenternet测试来改变正方形的颜色,但是mouseenterner mouseenternet不会执行。鼠标有反应,但只对点击、按下和释放做出反应。所以我不确定到底发生了什么。我希望你能帮我指出我的问题,谢谢Java mouseEntered将不会执行,java,swing,awt,mouselistener,Java,Swing,Awt,Mouselistener,我试图做一个mouseenternet测试来改变正方形的颜色,但是mouseenterner mouseenternet不会执行。鼠标有反应,但只对点击、按下和释放做出反应。所以我不确定到底发生了什么。我希望你能帮我指出我的问题,谢谢 //Class class RectangleClass extends JPanel{ private int height; private int width; private boolean MouseEntered= false;
//Class
class RectangleClass extends JPanel{
private int height;
private int width;
private boolean MouseEntered= false;
private boolean MouseExit= false;
private JPanel myPanel = new JPanel();
//Inner class with mouse Event
class RectangleAdapter extends MouseAdapter{
public void MouseEntered(MouseEvent e){
System.out.println("MouseEntered");
MouseEntered = true;
repaint();
}
public void MouseExited(MouseEvent e){
System.out.println("MouseExited");
MouseExit = true;
repaint();
}
}
//constructor
public RectangleClass(int height,int width){
myPanel = this;
this.height=height;
this.width=width;
this.addMouseListener(new RectangleAdapter());
}
//paint graphic
public void paint(Graphics g){
super.paint(g);
g.clearRect(0, 0, width, height);
g.drawRect(0, 0, width, height);
g.setColor(Color.YELLOW);
if (MouseEntered){
g.setColor(Color.CYAN);
MouseEntered= false;
}
if (MouseExit){
g.setColor(Color.orange);
MouseExit= false;
}
g.fillRect(0, 0, width, height);
}
}
public class RectangleContainer extends JFrame{
public RectangleContainer(){
setLayout(null);
JPanel myPanel = new RectangleClass(100,100);
myPanel.setBounds(50, 50, 200, 200);
setSize(200,200);
add(myPanel);
setVisible(true);
}
public static void main(String args[]){
new RectangleContainer();
}
}
实际上,您并没有重写
MouseAdapter
的方法,您需要
@Override
public void mouseEntered(MouseEvent e) {
添加@Override
将让编译器检查您是否重写了正确的方法。顺便说一句,这同样适用于美国
旁注:
- 不要使用-始终使用
- 用于自定义绘制覆盖
而不是paintComponent
paint
- Java命名约定表明所有变量都以小写字母开头,这将使变量
MouseEntered
MouseEntered
- 您实际上并没有重写
MouseAdapter的方法,您需要
@Override
public void mouseEntered(MouseEvent e) {
添加@Override
将让编译器检查您是否重写了正确的方法。顺便说一句,这同样适用于美国
旁注:
- 不要使用-始终使用
- 用于自定义绘制覆盖
paintComponent
而不是paint
- Java命名约定表明所有变量都以小写字母开头,这将使变量
MouseEntered
MouseEntered
您已经在代码中用大写字母M启动了鼠标插入的方法。将其更改为小写字母M。您已经在代码中用大写字母M启动了鼠标插入的方法。将其更改为小写字母M。公共无效绘制(图形g){
不要覆盖绘制(…)
在JPanel
中-它应该是paintComponent(图形)
。并使用@Override
符号检查该方法是否存在。这很有趣,我从未见过有人这样做。介意为我放一个示例代码吗?尝试修改它,如果需要,再问另一个问题。好的,谢谢你的提示。我理解你为什么使用paintComponent。谢谢安德鲁。公共无效绘制(图形g){
不要在JPanel
中重写paintComponent(..)
-它应该是paintComponent(图形)
。并使用@Override
符号检查该方法是否存在。这很有趣,我从未见过有人这样做。介意为我放一个示例代码吗?尝试修改它,如果需要,再问另一个问题。好的,谢谢你的提示。我理解你为什么使用paintComponent谢谢安德鲁。我认为另一个答案更好呃(第一个&更完整)。我认为另一个答案更好(第一个&更完整)。哦,这是自动生成的,但eclipse现在将其删除。感谢您的建议。我发现很难相信eclipse自动生成了@Reimeus评论的任何代码。1)eclipse会编写正确的方法签名(可能使用@Override
表示法。完成此操作后,方法名称的大小写将正确。2)Eclipse不会自动将布局设置为null
——那么你到底在责怪IDE什么呢?布局为null的部分是我做的,我想通过x和y位置自由设置面板。mouseEvent部分我不确定我是如何复制并错误地复制布尔名称的。“布局空白部分是我做的,我想通过x和y位置自由设置面板。"使用null
布局将阻止您从简单的GUI发展到包含许多组件、动态添加组件、可调整大小、可以使用不同的PLAF等的GUI。了解如何结合布局构造函数中定义的间距使用布局,以及基于Swing的Border
对象GUI的大小和形状都很可靠。我对GUI不是很在行,但我会研究并了解它。感谢自动生成的tipoh,但eclipse我现在将其删除。感谢您的建议。我发现很难相信eclipse自动生成了@Reimeus评论的任何代码。1)Eclipse将编写正确的方法签名(可能使用@Override
表示法。完成此操作后,方法名称的大小写将正确。2)Eclipse不会自动将布局设置为null
——那么你到底在责怪IDE什么呢?布局为null的部分是我做的,我想通过x和y位置自由设置面板。mouseEvent部分我不确定我是如何复制并错误地复制布尔名称的。“布局空白部分是我做的,我想通过x和y位置自由设置面板。"使用null
布局将阻止您从简单的GUI发展到包含许多组件、动态添加组件、可调整大小、可以使用不同的PLAF等的GUI。了解如何结合布局构造函数中定义的间距使用布局,以及基于Swing的Border
对象图形用户界面的大小和形状都很可靠。我对图形用户界面不是很在行,但我会研究它并了解它。谢谢你的提示