JLabel tooltiptext没有显示

时间:2013-01-17 20:57:20

标签: java swing user-interface tooltip jlabel

我预计这会非常简单明了,但是将鼠标悬停在鼠标上时不显示工具文本。我尝试打印文本并正确打印。我有什么错误吗?

public class gui2 extends JFrame {
private JLabel item1;
public gui2() {
    super("The title bar");
    setLayout(new FlowLayout());
    item1 = new JLabel("label 1");
    item1.setToolTipText("This is a message");
    String str = item1.getToolTipText();
    System.out.println(str);
    add(item1);
}

   class gui {
public static void main(String[] args) {

    gui2 g2 = new gui2();
    g2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    g2.setSize(400, 200);
    g2.setVisible(true);
}

} }

2 个答案:

答案 0 :(得分:2)

如@restricteur所述,您的代码无法编译。

这是因为保存gui的类main(..)嵌套在另一个类中,因此除非标记嵌套类,否则不允许static方法声明{1}}。 (我只是从static)移出/取消嵌套Gui

除了你的代码确实有用之外,我认为你很仓促 - 将鼠标悬停在 Gui2 上3-4秒,你应该看到出现JLabel

(使用您的代码当然没有编译错误): enter image description here

有关代码的建议:

1)请注意java命名约定,即类名应以大写字母开头,此后每个新词也应ToolTip变为guiGui但我更喜欢前者。

2)请勿在{{1​​}}上使用GUI并在适当的setSize上致电JFrame,然后在LayoutManager上致电pack(),然后再将其设为可见(但是添加)。

3)不要不必要地扩展JFrame只需创建一个实例并使用它。

4)始终通过JFrame阻止在Event Dispatch Thread上创建和操作Swing组件。

5)选择SwingUtilities.invokeLater(Runnable r),除非使用setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);,因为无论是否退出GUI,这都将允许Timer继续。

以下是具有上述修复的代码:

enter image description here

main(..)

答案 1 :(得分:1)

即使添加导入,您的代码也无法编译。以下是您的代码已更正并正常工作:

import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Gui {
    public static void main(String[] args) {

        Window window = new Window();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(400, 200);
        window.setVisible(true);
    }
}

class Window extends JFrame {
    private static final long serialVersionUID = 1L;
    private JLabel jlabel;

    public Window() {
        super("The title bar");
        setLayout(new FlowLayout());
        jlabel = new JLabel("label 1");
        jlabel.setToolTipText("This is a message");
        String str = jlabel.getToolTipText();
        System.out.println(str);
        add(jlabel);
    }
}