我正在从事一项学校任务,这要求我能够挑选一个徒劳无益的、将它拖到一个地点,然后将它推向一个地点。 我能够利用<密码>TransferHandler<>/code>和从分机组中穿戴的刀子,但根据教授的说法,这并非是履行这一职责的一种可以接受的方式。 因此,我试图通过<代码>MouseListener接口实现同样的效果。
基本结构是:我有一个<条码>。 意见编码>载有<编码>JLabel -dervived cases of TileView
。 我需要了解一些事件,这些事件使我了解一下:LocationView
则已公布。 我正在通过<代码>TileView将其包含在上的模拟活动。 观点代码>,以便我能够妥善处理<条码>受压力的条码>活动。
添加<代码>Systemout.println( s to the mouselecters for mousePressed
和mouseReleased
至Location> 观点条码>和<条码> 令我惊讶的是,在A号地点将Tile A的 mo变,然后拖到B号地点,放行将给Tile A和A号地点,而不是B号地点造成一个烟雾释放事件。
为努力围绕这一点开展工作,我尝试在上找到一个玻璃灯。 在添加玻璃灯并添加一个活动听众之后,我可以看到,模拟活动确实通过玻璃灯过滤,但释放的模拟活动仍然只被点击。
是否有办法把与同一行动有关的<代码>mousePressed和mouseReleased
活动分别列为单独的构成部分?
EDIT: Here is the solution that I arrived at, based off of the answer by lins314159
public void mouseReleased(MouseEvent e) {
Point p = SwingUtilities.convertPoint(LocationView.this, ((Component)e.getSource()).getLocation(), LocationView.this.wsa.getGameView());
e.translatePoint((int) p.getX(), (int) p.getY());
Component tile = SwingUtilities.getDeepestComponentAt(LocationView.this.wsa.getGameView(), e.getX(), e.getY());
}