Java,悬停组件时显示帮助标签

标签 java jlabel mouselistener jcomponent

我做了一个程序,里面有很多JCheckBox和JTextField等组件。

我有一个 LinkedHashMap,其中包含每个 JCheckBox 的文本作为键,以及每个键的解释作为映射值。 一旦我的鼠标指向一个 JCheckedBox 的文本,我希望 JLabel 出现在鼠标坐标的右侧,显示相应键的值。

我读到,为了能够在主 JPanel 上的任何位置设置 JLabel 位置,我需要将此主 JPanel 的布局设置为 null,然后重新绘制它。它有效。

但是,当我从 JCheckBox 切换到另一个 JCheckBox 时,它们的位置突然发生变化,眨眼间又回到原来的位置。此外,JLabel 位置(Y 轴)类似于鼠标下方 100 像素。

您能帮我改进这个功能吗?您将在下面找到 mouseLlistener 的必要代码。 “this”指的是主 JPanel,我为其设置了布局。 “this.lInformation”是我正在使用的帮助 JLabel。 也许还有其他更简单的方法?

public void mouseExited(MouseEvent e) {

    if("JCheckBox".equals( e.getComponent().getClass().getSimpleName() ) ) {
        this.lInformation.setVisible(false);
        this.lInformation = null;
        // Here we make the help label disappear
    }
}


public void mouseEntered(MouseEvent e) {

    String id = e.getComponent().getClass().getSimpleName();
    if("JCheckBox".equals( id ) ) {

    JCheckBox tempCB = (JCheckBox) e.getComponent();
    JPanel tempPanel = (JPanel) tempCB.getParent().getParent();

    this.lInformation = new JLabel( (String) this.FormattedFields.get( tempCB.getText()) );
    this.lInformation.setBounds(e.getXOnScreen(), e.getYOnScreen(), 40, 25);
    this.lInformation.setBorder(BorderFactory.createLineBorder(Color.yellow, 1));
    this.setLayout(null);
    this.add(this.lInformation);
    this.repaint();
    tempPanel.add(this.lInformation);
    this.setVisible(true);
    }
}

最佳答案

我认为您正在寻找ToolTipText,您所要做的就是获取您想要显示的描述值并将其设置为组件的工具提示。

例如:

String description = getDescription();
jCheckBox.setToolTipText(description);

当您将鼠标悬停在该组件上时,这将显示描述值。

请阅读有关 ToolTipText 的更多信息在 Swing 中。

关于Java,悬停组件时显示帮助标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639410/

相关文章:

java - 另一个谷歌地图 v2 无法充气,请

java drawImage 不能从事件中工作

Java:JFrame 与 MouseListener、KeyListener 和 PaintComponent 相关的问题

java - ChartMouseListener 和 MouseListener

java - repaint() 不再工作

java - 一次性收集 Java Stream 的平均值

增加时间的Java

Java 将 JLabels 添加到嵌入 ScrollPane 的面板中

java - 标签错误中的文本对齐?

java - JList 删除击键时选定的项目并单击