【问题标题】:Custom JButton with JTextArea component inside内部带有 JTextArea 组件的自定义 JButton
【发布时间】:2014-09-08 01:39:24
【问题描述】:

我扩展了 JButton 以便满足我的需要。我的新类中有一个 JTextArea 和两个 JLabel 组件。问题是,我无法点击 JTextArea。因此,当鼠标在 JTextArea 范围内时,按钮没有响应。标签没有问题。

就像在屏幕上一样。有四个按钮。每个都是一个单独的淡黄色矩形。当鼠标悬停在 JTextArea 的灰色矩形上时,我无法按下按钮。我需要 JTextArea 因为它支持多行。有没有办法让它不拦截鼠标?

如果我可以将 ActionListener 附加到 JTextArea 就可以了,但我不能。它不能有这种监听器。

【问题讨论】:

  • 为了尽快获得更好的帮助,请发布MCVE(最小、完整、可验证的示例)。
  • “我需要 JTextArea,因为它支持多行。”JLabel ..或JButton 也是如此。

标签: java swing click jbutton jtextarea


【解决方案1】:

您似乎正试图以一种非常非按钮的方式使用 JButton,包括让它持有一个 JTextArea,并且看起来一点也不像一个按钮。如果您想要一个不是可识别 JButton 的可点击区域,请考虑改用 MouseListener。您可能必须将相同的 MouseListener 添加到容器 JPanel 和 JTextArea。

【讨论】:

  • 我知道这很不寻常,但我还有其他普通按钮,它们只需使用 ActionListener 并在 actionPerformed 方法中管理它们的调用。我一直在寻找一些一致的方式来收集事件。从鼠标侦听器调度事件是一种选择,但需要时间并扩展复杂性。而且,正如您所提到的,如果我决定采用这种方式,我可能必须为我的新 JPanel 中的所有组件提供相同的侦听器。
【解决方案2】:

查看Concepts: Editors and Renderers,了解渲染器和编辑器之间的区别。

渲染器是组件的“橡皮图章”,它只是简单地“绘制”到JTable 的表面上,并不是真实的组件

您需要实现一个自定义编辑器,它可以将触发事件(在您的情况下为 MouseEvent)转换为本地上下文。

查看TableCellEditor#isCellEdtiable,这可能是您最接近可能触发单元格变为可编辑的事件源。

JButton 可以使用 HTML String (`"This is some text") 播种,这将能够支持多行和换行

说了这么多,您可能想认真地重新考虑您的设计...

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2013-12-22
    • 2021-08-12
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多