我预计这会非常简单明了,但是将鼠标悬停在鼠标上时不显示工具文本。我尝试打印文本并正确打印。我有什么错误吗?
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);
}
} }
答案 0 :(得分:2)
如@restricteur所述,您的代码无法编译。
这是因为保存gui
的类main(..)
嵌套在另一个类中,因此除非标记嵌套类,否则不允许static
方法声明{1}}。 (我只是从static
)移出/取消嵌套Gui
除了你的代码确实有用之外,我认为你很仓促 - 将鼠标悬停在 Gui2
上3-4秒,你应该看到出现JLabel
:
(使用您的代码当然没有编译错误):
有关代码的建议:
1)请注意java命名约定,即类名应以大写字母开头,此后每个新词也应ToolTip
变为gui
或Gui
但我更喜欢前者。
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
继续。
以下是具有上述修复的代码:
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);
}
}