Java JLabel tooltiptext未显示
我希望这是非常简单和直接的,但鼠标悬停在tooltiptext上时不会显示。我试着打印文本,结果打印正确。有什么评论我做错了什么Java JLabel tooltiptext未显示,java,swing,user-interface,tooltip,jlabel,Java,Swing,User Interface,Tooltip,Jlabel,我希望这是非常简单和直接的,但鼠标悬停在tooltiptext上时不会显示。我试着打印文本,结果打印正确。有什么评论我做错了什么 public class gui2 extends JFrame { private JLabel item1; public gui2() { super("The title bar"); setLayout(new FlowLayout()); item1 = new JLabel("label 1"); item1.setToo
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);
}
}
}即使添加导入,代码也不会编译。以下是您的代码已更正并正常工作:
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);
}
}
即使添加导入,代码也不会编译。以下是您的代码已更正并正常工作:
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);
}
}
正如@restricteur所提到的,您的代码无法编译 这是因为您的类
gui
包含main(..)
嵌套在另一个类中,因此不允许static
方法声明,除非嵌套类标记为static
。(我只是从Gui2
中移出/取消嵌套Gui
)
除此之外,您的代码确实有效,我认为您太仓促了-将鼠标悬停在标签上3-4秒,您应该会看到工具提示出现:
(当然,使用没有编译错误的代码):
关于代码的建议:
1) 请注意java命名约定,即类名应以大写字母开头,其后的每个新词也应如此,即gui
变成gui
或gui
,但我更喜欢前者
2) 在将其设置为可见之前(但在添加组件之后),不要在JFrame
上调用setSize
,使用并=适当的LayoutManager
并在JFrame
上调用pack()
3) 不要不必要地扩展JFrame
,只需创建一个实例并使用它即可
4) 始终通过SwingUtilities.invokeLater(Runnable r)
block在上创建和操作Swing组件
5) 选择setDefaultCloseOperation(JFrame.DISPOSE\u ON\u CLOSE)代码>除非使用Timer
s,否则无论GUI是否退出,这将允许main(…)
继续
以下是包含上述修复的代码:
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();
}
});
}
}
正如@restricteur所提到的,您的代码无法编译
这是因为您的类gui
包含main(..)
嵌套在另一个类中,因此不允许static
方法声明,除非嵌套类标记为static
。(我只是从Gui2
中移出/取消嵌套Gui
)
除此之外,您的代码确实有效,我认为您太仓促了-将鼠标悬停在标签上3-4秒,您应该会看到工具提示出现:
(当然,使用没有编译错误的代码):
关于代码的建议:
1) 请注意java命名约定,即类名应以大写字母开头,其后的每个新词也应如此,即gui
变成gui
或gui
,但我更喜欢前者
2) 在将其设置为可见之前(但在添加组件之后),不要在JFrame
上调用setSize
,使用并=适当的LayoutManager
并在JFrame
上调用pack()
3) 不要不必要地扩展JFrame
,只需创建一个实例并使用它即可
4) 始终通过SwingUtilities.invokeLater(Runnable r)
block在上创建和操作Swing组件
5) 选择setDefaultCloseOperation(JFrame.DISPOSE\u ON\u CLOSE)代码>除非使用Timer
s,否则无论GUI是否退出,这将允许main(…)
继续
以下是包含上述修复的代码:
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();
}
});
}
}
谢谢@restictur。我没有正确粘贴代码。我的代码正在编译并显示标签,但工具提示文本不起作用。我会小心地粘贴编译的代码。谢谢你抽出时间。谢谢@restictur。我没有正确粘贴代码。我的代码正在编译并显示标签,但工具提示文本不起作用。我会小心地粘贴编译的代码。谢谢你抽出时间。谢谢大卫。你对我仓促行事的看法几乎是对的,我并没有像我应该做的那样将鼠标悬停在JLabel上。我不停地把鼠标移到窗口上,但不完全在标签上。我的错。非常感谢您的其他评论,我将继续努力。谢谢David。你对我仓促行事的看法几乎是对的,我并没有像我应该做的那样将鼠标悬停在JLabel上。我不停地把鼠标移到窗口上,但不完全在标签上。我的错。非常感谢您的其他评论,我将继续努力。