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

时间:2014-03-25 15:39:31

标签: java jlabel mouselistener jcomponent

我制作了一个包含大量JCheckBox和JTextField以及其他组件的程序。

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

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

然而,当我从JCheckBox切换到另一个时,他们的位置突然改变并在一眨眼间恢复原状。此外,JLabel位置(Y轴)类似于鼠标下方100个像素。

你能帮我改进这个功能吗?您将在下面找到mouseLlistener的必要代码。 "这"是指我设置布局的主要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);
    }
}

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找ToolTipText,您只需获取要显示的描述值并将其设置为组件的工具提示即可。

例如:

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

当您将鼠标悬停在description上时,会显示Component值。

请详细了解Swing中的ToolTipText

答案 1 :(得分:0)

如果您希望组件显示在另一个组件的顶部,则应将其添加到分层窗格,而不是同一个容器。

推荐阅读:http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

并且:https://weblogs.java.net/blog/alexfromsun/archive/2006/09/a_wellbehaved_g.html

您也可能只是在谈论工具提示:http://docs.oracle.com/javase/tutorial/uiswing/components/tooltip.html