0

我希望这非常简单明了,但是将鼠标悬停在上面时不会显示工具提示文本。我尝试打印文本并正确打印。任何评论我做错了什么?

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);
}

} }

4

2 回答 2

2

即使您添加了导入,您的代码也不会编译。这是您的代码已更正并可以正常工作:

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);
    }
}
于 2013-01-17T21:11:44.867 回答
2

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

这是因为gui持有 的类main(..)嵌套在另一个类中,因此static除非嵌套类被标记,否则不允许声明方法static。(我只是Gui从移动/取消嵌套Gui2

除了您的代码确实有效之外,我认为您很仓促 -将鼠标悬停 JLabel 3-4 秒,您应该会看到以下内容ToolTip

(使用您的代码当然没有编译错误): 在此处输入图像描述

代码建议:

1)请注意java命名约定,即类名应该以大写字母开头,之后的每个新词也应该gui变成GuiGUI,但我更喜欢前者。

2)不要调用setSize使用JFrame和=适当LayoutManager并在设置为可见之前调用pack()JFrame但在添加组件之后)。

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

4) 始终通过块在事件调度线程上创建和操作 Swing 组件。SwingUtilities.invokeLater(Runnable r)

5) 选择setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);除非使用Timers,因为main(..)无论是否退出 GUI,这将允许继续。

这是具有上述修复的代码:

在此处输入图像描述

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

class Gui2 {

    private JLabel item1;
    private JFrame frame;

    public Gui2() {
        frame = new JFrame("The title bar");
        frame.setLayout(new FlowLayout());
        item1 = new JLabel("label 1");
        item1.setToolTipText("This is a message");
        String str = item1.getToolTipText();
        System.out.println(str);
        frame.add(item1);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

class Gui {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Gui2();
            }
        });
    }
}
于 2013-01-17T21:51:01.880 回答