Tag: 事件

Java应用程序:mouseDragged事件通常不会被执行

是否有一种方法可以更频繁地调用mouseDragged Event(在我的情况下,绘制一个颜色?我需要它用于平滑绘图,因为现在,如果你移动得太快,它不会绘制我的所有路径。此外,我有一个2D数组存储像素的颜色,所以如果我试图通过另一种方式解决问题也有问题,这就是为什么我认为增加mouseDragged Frequency将是最好的事情做 谢谢

如何关闭Windows资源管理器?

我有一个代码,使用jDesktop打开一个Windows资源管理器界面,当我单击按钮LOGIN并且它正常工作.. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Desktop desktop = Desktop.getDesktop(); File dirToOpen; try { dirToOpen = new File(“C://as//2010-0000-1”); desktop.open(dirToOpen); } catch (IOException ex) { ex.getMessage(); } catch (IllegalArgumentException iae) { System.out.println(“File Not Found”); } } 那么现在,我的问题是当我点击按钮LOGOUT时,jDesktop windows explorer界面也应该关闭……我不知道要使用什么代码….

java系统范围的键盘和鼠标状态

有没有办法在系统范围内监听鼠标和键盘事件而不将这些事件从系统队列中删除? 例如,有没有办法设置一个恶魔,比方说,它会监听并报告每一个键盘和鼠标事件?

拖动JPanel

我在尝试拖动JPanel时遇到了问题。 如果我纯粹在MouseDragged中实现它: public void mouseDragged(MouseEvent me) { me.getSource().setLocation(me.getX(), me.getY()); } 我得到了移动物体一直在两个位置之间弹跳的奇怪效果(产生更多“拖动”事件)。 如果我按照这篇文章中描述的方式进行,但是: public void mouseDragged(MouseEvent me) { if (draggedElement == null) return; me.translatePoint(this.draggedXAdjust, this.draggedYAdjust); draggedElement.setLocation(me.getX(), me.getY()); } 我得到的元素弹跳效果要少得多,但它仍然可见,元素只移动鼠标指针的一半。 为什么会发生这种情况/如何解决这种情况?

创建一个简单的事件驱动架构

目前在项目上遇到一些麻烦。 我正在实施一个游戏,我想让它以事件为导向。 到目前为止,我有一个EventHandler类,它具有重载方法,具体取决于生成的事件类型(PlayerMove,Contact,Attack等) 我将有游戏驱动程序或类生成事件。 我的问题是如何在不将事件生成类紧密耦合到事件处理程序并使EDA冗余使用的情况下如何有效地处理事件? 我想设计自己的简单处理程序,而不是使用内置的Java处理程序

Swing:鼠标hover时显示/隐藏按钮

所以我想在JPanel放一个按钮,但我想让它保持不可见/隐藏,除非鼠标指针hover在它上面。 此时,应使按钮可见,对点击作出反应等。 当鼠标离开该区域时,应该再次隐藏它。 我尝试将MouseListener添加到我的JButton并使用setVisible() ,但是当我隐藏按钮( setVisible(false) )时,监听器不再起作用 – 应用程序的行为就像按钮根本不存在一样。 实现此行为的正确方法是什么? 编辑:我使用绝对布局( setLayout(null) ),我手动使用setBounds(x, y, width, height)放置我的组件。

在Java中处理循环事件的优雅方式?

我觉得这对我来说不是一个特定的问题; 以前每个人都可能遇到过这个问题。 为了正确说明它,这是一个简单的UI: alt text http://sofzh.miximages.com/java/www.freeimagehosting.net 如您所见,这两个微调器控制着一个变量 – “A”。 唯一的区别是他们使用不同的视图来控制它。 由于这两个微调器的显示值是同步的,因此出现循环事件。 如果我更改顶部微调器,将更改“A”,并且底部微调器的值也将相应更新。 但是 ,更新底部微调器的调用(例如setValue)也会触发另一个事件,指示顶级微调器根据底部微调器的值进行更新。 因此创建一个错误的循环,最终可能导致StackOverFlowexception。 我以前的解决方案有点麻烦:我放置了一个保护布尔值来指示是否应该执行第二次更新调用。 现在我想问一下“ 我怎样才能优雅地处理这种情况? ( 一般来说,不是特定于纺纱厂 )” 谢谢 更新: 由于我有2个答案建议我使用观察者结构,我不得不说些什么。 就像我说的那样,它很棒但远非完美。 不仅因为其固有的复杂性,而且还因为它无法解决问题 。 为什么? 要了解原因,您必须在Java Swing中实现View和Model-Controller的紧密耦合 。 让我们以我的微调器UI为例。 假设变量A实际上是Observer对象。 然后,在从顶部微调器触发第一个状态更改事件后,观察者“A”将更新其值并触发PropertyChange事件以通知底部微调器。 然后是第二次更新,它更新了底部微调器的视图。 但是 ,更改底部微调器的视图不可避免地会触发冗余事件,该事件将尝试再次设置“A”的值。 然后,完全构造致命循环并抛出堆栈溢出。 理论上,Observer模型试图通过引入2个独立的反馈路径来解决直接循环。 链式更新赔率(在事件响应代码中)隐含地形成连接两个路径的桥,再次进行循环。

窗口/舞台失去焦点时的事件

当JavaFX阶段失去焦点时,如何运行一段代码(或更确切地说:关闭舞台)? 例如,在Dropbox或Chrome中:如果单击托盘图标,则会打开一个小窗口。 如果您现在单击屏幕上的任意位置,窗口将关闭。 这正是我想在JavaFX应用程序中创建的行为。 我已经搜索了很长时间才找到解决方案,但找不到一个…… 所以,我正在寻找类似这样的东西: stage.addEventHandler(EventType.FOCUS_LOST, new EventHandler() { /*…*/ } ); 谢谢你帮助我!

双击设计选项卡中的对象后删除Netbeans自动生成的代码

所以我使用Netbeans和设计选项卡,放置标签,文本框等。很棒,但是当你双击说标签时它会自动生成这段代码: private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } 现在我不希望它这样做,但当我突出并尝试删除它时 – Netbeans不允许我这样做。 我该怎么做才能删除它?

Swing:如何从AWT线程运行作业,但是在窗口布局之后?

我的完整GUI在AWT线程内运行,因为我使用SwingUtilities.invokeAndWait(…)启动主窗口。 现在我有一个JDialog,它只是显示一个JLabel ,它表示某个作业正在进行中,并在作业完成后关闭该对话框。 问题是:标签不显示。 这项工作似乎是在JDialog完全布局之前开始的。 当我只是打开对话框而不等待作业并关闭时, 会显示标签。 对话框在其ctor中执行的最后一项操作是setVisible(true) 。 诸如revalidate() , repaint() ,……之类的东西也无济于事。 即使我为受监视的作业启动一个线程,并使用someThread.join()等待它也没有帮助,因为当前线程(即AWT线程)被join阻塞,我猜。 用JFrame替换JDialog也无济于事。 那么,这个概念一般是错的吗? 或者,在确保JDialog (或JFrame )完全布局后 ,我可以管理它以完成某项工作吗? 我想要实现的简化算法: 创建JDialog的子类 确保它及其内容完全布局 启动一个进程并等待它完成(线程与否,无关紧要) 关闭对话框 我设法编写了一个可重现的测试用例: 编辑现在解决了问题:这个用例确实显示了标签,但由于对话框的模态,它在“模拟过程”之后无法关闭。 import java.awt.*; import javax.swing.*; public class _DialogTest2 { public static void main(String[] args) throws Exception { SwingUtilities.invokeAndWait(new Runnable() { final JLabel jLabel = new JLabel(“Please wait…”); @Override public […]