我想在JFrame中听鼠标移动和单击。为此,我添加了一个实现如下的MouseListener :(
View类的整个代码在https://gist.github.com/2837224,Board类在https://gist.github.com/2837231)
class BattleshipsFrame extends JFrame {
private final Board playerBoard, opponentBoard;
private View view;
/** Main window constructor. */
BattleshipsFrame() {
...
...
...
//creating and displaying boards
playerBoard = new Board();
opponentBoard = new Board();
PlayerBoardListener mouseListener = new PlayerBoardListener();
this.addMouseListener(mouseListener);
playerBoard.addMouseListener(mouseListener);
opponentBoard.addMouseListener(new OpponentBoardListener());
boards.add(playerBoard);
boards.add(opponentBoard);
...
...
...
}
/** Listener responsible for handling mouse events on player board */
private class PlayerBoardListener extends MouseAdapter {
@Override public void mousePressed(MouseEvent event) {
try {
if(event.getButton() == MouseEvent.BUTTON1 && controllerConnection != null)
controllerConnection.sendShipPlacedEvent(event.getX()/40, event.getY()/40, ShipType.EMPTY);
} catch(Exception e) {
e.printStackTrace();
}
}
@Override public void mouseMoved(MouseEvent event) {
//TODO
System.out.println("Mouse movement detected! Actual mouse position is: " + event.getX()+ "," + event.getY() + ".");
}
@Override public void mouseDragged(MouseEvent event) {
//TODO
System.out.println("Mouse movement detected! Actual mouse position is: " + event.getX()+ "," + event.getY() + ".");
}
}
有趣的是,mousePressed()运行良好,但其他两个运行不正常(移动鼠标时控制台上没有任何显示)。有人可以告诉我我在做什么错吗?提前致谢!
如果您想接收mouseMoved
和mouseDragged
事件,还需要将侦听器注册为MouseMotionListener
。
MouseAdapter adapter = ...
JFrame frame = ...
frame.addMouseListener(adapter);
frame.addMouseMotionListener(adapter);
问题内容: 可以以标准方式执行此操作吗? 这是场景。 开始在EDT中执行一些昂贵的操作(EDT被阻止,直到昂贵的操作结束为止)。 在阻止EDT的同时,用户继续单击/拖动鼠标按钮。所有鼠标动作都记录在某处。 当EDT免费时(用昂贵的东西完成),它开始处理鼠标事件。 我在步骤3中想要的是丢弃堆积的鼠标事件。EDT释放后,任何新的鼠标事件都应按常规方式处理。 关于如何实现这一目标的任何想法。 PS:对于
我已经在JList上有一个这样的自定义控件库 但是我希望Jlist有滚动条,所以我将自定义控件的超类更改为JScrollPane并将JList添加到其中。像这样的代码 好吧,如果MyClass扩展了JList,在JFrame中我可以将MouseListener添加到MyClass对象中,在mouseClick中我比较MouseEvent getSource是MyClass的一个实例并调用MyCla
问题内容: 我在Java中为simpleGUI编写了一个小代码。 我是JAVA的新手。与此程序相关的问题很少。 有人可以解释一下actionPerformed方法如何在没有任何调用的情况下执行吗? 在这里,我在go()方法的本地定义了框架对象,我们在actionPerformed中使用了按钮,这是另一种方法,那怎么可能呢?按钮没有嵌入框架吗? 谢谢.. 问题答案: 有人可以解释一下actionPe
问题内容: 在通过单击发送按钮或在一段代码的消息文本字段中按Enter的方法中,我有以下代码。 最后的代码使文本区域空白。但是,通过按Enter键发送消息后,文本框将包含换行符,而不是为空。 我的猜测是,在事件处理程序运行之后,然后添加了换行符。如何停止添加换行符? 问题答案: 致电后尝试添加
问题内容: 也许我在这里想解释的没有任何意义,所以我想提前道歉。无论如何,我会尽力的。 我试图读取文件,执行一些数据库操作,然后将内容移动到另一个文件。我想知道是否有可能在Java中以原子方式执行所有这些操作,因此,如果操作列表中有任何错误,请回滚完整序列并返回到起点。 在此先感谢您的帮助。 问题答案: 看一下Apache Commons Transaction 。它具有事务性管理文件的功能。 一
具有事件源的CQR看起来非常适合作为我们的一个系统的架构,目前我们只担心一件小事:处理大量事件,并因此处理大型事件商店。 我们当前的系统每天接收大约一百万个事件(目前与事件源无关),如果我们将它们存储在更长的时间内,我们的事件存储可能会变得相当大,但是如果我们经常转储/清除滚动快照,我们可能会失去事件源的一大优势:关于系统历史和重播的信息。 在CQRS架构中处理这个问题的常见方法是什么?这到底是个