2014-01-29 42 views
-1

我在java中创建了一个GUI,其中包含多个JButton。我想包含一些异常处理,这样如果一个特定的按钮被点击两次或者直接点击一下,就会弹出一条消息,说这个命令是不允许的。你会建议我使用哪种类型的异常?GUI中的异常处理

问候。

+0

Java只有一个“类型”的异常处理。你要么丢,要么抓,要么你忽略。你能稍微扩展一下吗? – Rainbolt

+0

更好地禁用该按钮,以便使用无法再次单击它。 – SaurabhJinturkar

+1

只需使用'getClickCount()'。如果它大于2,请禁用点击。我不明白你为什么需要一个*例外*在这里。 – Maroun

回答

1

从像actionPerformed的方法抛出异常是由langage语义禁止的。即使它已被授权,您认为主事件处理线程可以对这种异常做些什么?

您需要重新考虑界面的工作方式。例如,如果某个操作被禁止,那么您的界面必须显示它,例如禁用对象。不让用户点击按钮而不是让用户点击并向他发送一些反馈,表明他的行为不好。

在更复杂的scenarii你只需要让显得有些模态对话框,通知他问什么是不可能的时刻用户。这可能是一些异常事件处理程序过程中引发的结果,但你抓住它不把它:

... actionPerformed(...) { 
    if (someConditionOccured) { 
    JOptionPane.showMessageDialog(...); 
    } else { 
    // do what you want on normal condition 
    } 

现在,可能是这样的:

... actionPerformed(...) { 
    try { 
    // something 
    } catch (...) { 
    JOptionPane.showMessageDialog(...); 
    } 

你可以使用任何其他合适的对话。

+0

我从来没有打算使用扔。我一直知道我会尝试和捕捉。我的问题是,我在捕获后实际上在支架中输入了什么内容,这将适合检查是否连续单击了某个JButton。 – Hustl3r28

+0

那么为什么要谈论异常处理呢?你的双击条件可以进行测试,无需例外处理?我错过了一点吗? –

+0

你的意思是否是陈述? – Hustl3r28

0

我假设你为每个按钮附加一个侦听器,以在点击按钮时执行一个动作。

在这种监听,执行属于该按钮的动作之前,做一些验证:

public void actionPerformed (ActionEvent e) { 
    if (e.getSource() == myNotAllowedToClickButton) { 
     return; 
    } 

    // code that does stuff 
} 

更妙的是,确保用户不能点击按钮,通过禁用它(myButton.setEnabled(false);)。

+3

禁止从'actionPerformed'抛出异常。你不能抛出任何异常,因为方法的签名没有指定这样的。即使它已被授权,您认为主要事件处理线程将如何处理它? –

+0

非常真实,对不起。答案固定。 – Hidde

0

你根本无法在这里使用try/catch,因为单击按钮两次并不是一个例外情况。仅仅通过行动就不会产生异常。您在用户点击后在代码中执行的任何操作都可能导致异常,但是这是对您的影响。

你想在这里做的是确定用户是否点击超过一次的动作事件中使用getClickCount()更多。或者,您可以在操作侦听器的开始处禁用按钮 - 执行所需的任何操作 - 然后在操作结束时再次启用该按钮。

如果你需要什么比这一点,你需要重新设计你的,你将有可能最终运行到并发问题的应用程序更加复杂。

0
  • 添加一个共同的动作监听所有按钮。
  • 维护一个固定大小的堆栈来存储点击的按钮。
  • 点击任意按钮
    • 在每次点击时按下堆栈中的单击按钮(如果需要,应移除最旧的项目)。
    • 检查堆栈中的无效点击模式并采取必要的措施。

栈的大小应该等于点击模式最大尺寸,您将使用。