【问题标题】:How to "Unclick" a JButton without releasing the left mouse button?如何在不释放鼠标左键的情况下“取消单击”JButton?
【发布时间】:2015-05-15 21:09:10
【问题描述】:

我已经设置了一个鼠标拖动的监听器。我试图将其设置为您可以单击一个按钮,然后将鼠标拖到其他按钮上以单击其他按钮。我遇到的问题是,当您单击第一个按钮时,它会变成灰色,就像在等待您释放鼠标按钮一样。当您将鼠标从按钮上移开(仍然按住鼠标左键)时,它会恢复到正常颜色,但在松开之前您无法突出显示任何内容。无论如何模拟放开鼠标并“取消单击”按钮以便突出显示其他内容?

【问题讨论】:

  • 这样做的根本目的是什么?这些信息可能会为我们提供有关如何实施事物的更好想法。我问的原因是 JButton click 和 MouseListener 是两个完全独立且有些不相关的东西。将它们捆绑在一起有一些陷阱,可以做到这一点的方式将取决于需求。
  • 我有一个按钮网格,目的是拖动鼠标并更改悬停按钮的颜色。我得到的是与 MouseMoved 侦听器一起工作,但我无法让鼠标拖动工作,因为(我假设)第一个按钮永远不会被点击。
  • 如果您想在 JButton 的“上方”添加 MouseListener,您可能需要为此使用玻璃窗格。然后当设置为可见时,玻璃窗格将窃取鼠标输入,当不再可见时,GUI 上的组件将接收输入。

标签: java swing jbutton


【解决方案1】:

您观察到的是 Swing 按钮使用的 ButtonModel 的典型行为。检查了一个完整的示例here,但请注意效果如何取决于所选外观的ButtonUI 委托。

要获得您想要的效果,您必须使用自己的 BasicButtonUI 变体和自定义 ButtonModel 创建按钮,该 ButtonModel 使用 isRollover() 将按钮添加到程序的选择模型概念中。

作为替代方案,请考虑JList,其中包含允许MULTIPLE_INTERVAL_SELECTIONListSelectionModel。一个竞争示例显示在here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多