当前位置: 首页 > 面试题库 >

阻止JTree选择更改发生的最佳方法?

章锦
2023-03-14
问题内容

我有一个对话框,其中JTree中的每个条目在不同的面板中都有其相应的选项,当选择更改时会更新该面板。如果将其中一项的选项设置为无效状态,则当用户尝试更改树中的其他项时,我希望出现一个错误对话框,并且选择保持不变。

我尝试使用JTree上的valueChangeListener来执行此操作,但是目前如果有错误,则必须让valueChanged方法将“
setSelectionRow”调用到旧选择。为了避免出现StackOverflow,在执行此操作之前,我将boolean“
isError”设置为true,以便可以忽略新的valueChanged事件。不知何故我觉得这不是最好的解决方案。;-)

我将如何处理呢?对于这种情况,是否有一个好的设计模式?


问题答案:

不确定这是最佳做法,但也许您可以将FocusListener放在要验证的组件上……在调用事件时调用验证,然后在不希望移动焦点时使用then事件因为验证失败?

以后编辑:

至少对于Java
8(我没有检查早期版本),此解决方案将无法工作,因为FocusEvent似乎不是低级事件。因此,它不能被消耗。请参见方法AWTEvent.consume()



 类似资料:
  • 问题内容: 我有一个(Ruby on Rails 4)应用程序,并使用了一个PostgreSQL查询,该查询基本上查看机会表,在机会为’available =true’的行中随机搜索,并用’available = false’更新这些选定的行。每次用户单击“尝试机会”时,应用程序都会使用以下查询。 我已经苦苦挣扎了5天,但现在我已经设法大致了解了它的表现(严重):现在我需要知道如何对其进行更改。

  • 问题内容: 我想要在PostgreSQL中随机选择行,我尝试了以下方法: 但是其他一些建议: 我有一个很大的表,有5亿行,我希望它能很快。 哪种方法更好?有什么区别?选择随机行的最佳方法是什么? 问题答案: 根据您的要求(加上注释中的其他信息), 您有一个数字ID列(整数),并且只有很少(或很少有)间隙。 显然没有或只有很少的写操作。 您的ID列必须建立索引!主键很好用。 下面的查询不需要大表的顺

  • 问题内容: 我有一个JTree,其节点由JLabel和JComboBox组成。我想要的是,当单击时,选定的JComboBox会展开,但似乎第一次单击是JTree本身(?)占用的,因此我必须单击两次。 这是我的代码: 问题答案: 这是一个简短的示例: 这对我有用:Bug ID:JDK-8023474第一次按下鼠标并没有开始在JTree中进行编辑

  • 问题内容: 管理数据库更改的最佳方法是什么?无论数据库客户端的语言如何,我都需要一个解决方案。我还希望能够在那些更改中使用特定的数据库功能,例如存储过程,触发器等。 问题答案: 首先,请确保您已编写了完整的数据库构建脚本,以便可以根据需要重建数据库。 然后,应将每个更改写为更新脚本。这样,您可以针对数据库分别运行每个更改。 将更改提交到代码库后,将更改脚本与构建过程合并,使其自动发生…然后将更改脚

  • 我正在开发一个使用JTree的java应用程序。我想归档的是,当我点击一个已经被选中的节点时,它会被取消选中。 我目前的解决方案是向jtree添加鼠标侦听器和树选择侦听器。但问题是,valueChanged只有在选择发生更改时才会被调用(而不是在两次选择同一节点时)。为了解决这个问题,我添加了一个布尔值,它指示是否第一次单击了节点,然后我在MouseRelease函数中处理取消选择。这是可行的,但

  • 我有以下问题,例如:给定一个带有符号 的桶和一本菜谱来创建配对,例如: 从桶中选择最佳配对,在桶中保留尽可能少的符号。因此,使用上面的示例值,最佳配对将是: ,它将使用给定的所有符号。 从桶中简单地选取可能导致类似于: 使得和不匹配。和无法匹配,因为该书不包含该特定连接的制作方法 注: 实际问题平均包含:桶中500个元素,约30种符号。 我们已经尝试使用bruteforce算法来实现这个解决方案,