我制作了一个包含大量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);
}
}
答案 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