Java 语句导致 mouseClick 成为 Jpanel 中 MouseListener 的 mouseRelease
Java statement causes a mouseClick to be a mouseRelease for MouseListener in Jpanel
我已经通过以下方式向我的 JPanel 添加了一个鼠标侦听器。输出到 JPanel 的是从一组图像绘制到屏幕上的图像。
public class NewFrame extend JFrame {
public New JFrame() {
statusBar = new JLabel("Mouse Outdide Panel"); //displays events for mouse
add(statusBar,BorderLayout.SOUTH); //add to JFrame
MouseHandler handler = new MouseHandler();
JPanelMap.addMouseListener(handler); //add both mouse listeners to JPanel
JPanelMap.addMouseMotionListener(handler);
}
private class MouseHandler implements MouseListener,
MouseMotionListener
{
public void mouseClicked(MouseEvent event) {
statusBar.setText( String.format( "Clicked at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
mapObject.updateDockOrShip(x, y,text); //updates selected icon on screen
}
public void mousePressed(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
statusBar.setText( String.format( "Released at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
/*this is the troubleMaker, if i delete this line all "clicks"
work everywhere on my JPanel. but if i leave it in,
clicks work in some areas of JPanel, and other legitimate clicks
are recognized as mouseReleased in different area of JPanel
*/
mapbject.checkDocks(x,y,tempint); //TROUBLE
}
public void mouseEntered( MouseEvent event )
{
}
public void mouseExited( MouseEvent event )
{
}
public void mouseDragged( MouseEvent event )
{
}
public void mouseMoved( MouseEvent event )
{
}
}
}
我已经突出显示了给定代码中令人不安的语句。一旦我实现了这条线,地图的某些部分就可以通过点击来点击,而其他部分则不可点击,即使我仍然做了同样的点击。我认为鼠标点击就是鼠标点击,无论您在何处点击鼠标侦听器,或者我假设错误或遗漏了什么。当对 mouseReleased 操作执行该语句时,鼠标单击的行为似乎发生了变化,但我不明白为什么。
我不确定这是否是您问题的根源,因为我不确定您所有代码的作用,但它看起来像是一个潜在问题:
您可能应该使用 mousePressed 方法覆盖而不是 mouseClicked,尤其是当它与绑定到 mouseReleased 的 activity 配对时。 mouseClicked 方法表示鼠标在同一个点上被按下和释放,并且是敏感的,如果您在单击和释放之间移动鼠标,即使是轻微移动也不会调用。另一方面,mousePressed 在 mousePressed 上立即响应,这听起来像你想要的。
所以也许:
private class MouseHandler extends MouseAdapter {
@Override
public void mousePressed(MouseEvent event) {
statusBar.setText( String.format( "Pressed at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
mapObject.updateDockOrShip(x, y,text); //updates selected icon on screen
}
@Override
public void mouseReleased(MouseEvent event) {
statusBar.setText( String.format( "Released at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
/*this is the troubleMaker, if i delete this line all "clicks"
work everywhere on my JPanel. but if i leave it in,
clicks work in some areas of JPanel, and other legitimate clicks
are recognized as mouseReleased in different area of JPanel
*/
mapbject.checkDocks(x,y,tempint); //TROUBLE
}
// since this extends MouseAdapter, all the other methods are not needed
}
我已经通过以下方式向我的 JPanel 添加了一个鼠标侦听器。输出到 JPanel 的是从一组图像绘制到屏幕上的图像。
public class NewFrame extend JFrame {
public New JFrame() {
statusBar = new JLabel("Mouse Outdide Panel"); //displays events for mouse
add(statusBar,BorderLayout.SOUTH); //add to JFrame
MouseHandler handler = new MouseHandler();
JPanelMap.addMouseListener(handler); //add both mouse listeners to JPanel
JPanelMap.addMouseMotionListener(handler);
}
private class MouseHandler implements MouseListener,
MouseMotionListener
{
public void mouseClicked(MouseEvent event) {
statusBar.setText( String.format( "Clicked at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
mapObject.updateDockOrShip(x, y,text); //updates selected icon on screen
}
public void mousePressed(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
statusBar.setText( String.format( "Released at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
/*this is the troubleMaker, if i delete this line all "clicks"
work everywhere on my JPanel. but if i leave it in,
clicks work in some areas of JPanel, and other legitimate clicks
are recognized as mouseReleased in different area of JPanel
*/
mapbject.checkDocks(x,y,tempint); //TROUBLE
}
public void mouseEntered( MouseEvent event )
{
}
public void mouseExited( MouseEvent event )
{
}
public void mouseDragged( MouseEvent event )
{
}
public void mouseMoved( MouseEvent event )
{
}
}
}
我已经突出显示了给定代码中令人不安的语句。一旦我实现了这条线,地图的某些部分就可以通过点击来点击,而其他部分则不可点击,即使我仍然做了同样的点击。我认为鼠标点击就是鼠标点击,无论您在何处点击鼠标侦听器,或者我假设错误或遗漏了什么。当对 mouseReleased 操作执行该语句时,鼠标单击的行为似乎发生了变化,但我不明白为什么。
我不确定这是否是您问题的根源,因为我不确定您所有代码的作用,但它看起来像是一个潜在问题:
您可能应该使用 mousePressed 方法覆盖而不是 mouseClicked,尤其是当它与绑定到 mouseReleased 的 activity 配对时。 mouseClicked 方法表示鼠标在同一个点上被按下和释放,并且是敏感的,如果您在单击和释放之间移动鼠标,即使是轻微移动也不会调用。另一方面,mousePressed 在 mousePressed 上立即响应,这听起来像你想要的。
所以也许:
private class MouseHandler extends MouseAdapter {
@Override
public void mousePressed(MouseEvent event) {
statusBar.setText( String.format( "Pressed at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
mapObject.updateDockOrShip(x, y,text); //updates selected icon on screen
}
@Override
public void mouseReleased(MouseEvent event) {
statusBar.setText( String.format( "Released at [%d, %d]",
event.getX() , event.getY() ) );
int x = event.getX();
int y = event.getY();
/*this is the troubleMaker, if i delete this line all "clicks"
work everywhere on my JPanel. but if i leave it in,
clicks work in some areas of JPanel, and other legitimate clicks
are recognized as mouseReleased in different area of JPanel
*/
mapbject.checkDocks(x,y,tempint); //TROUBLE
}
// since this extends MouseAdapter, all the other methods are not needed
}