以下代码不起作用(JLabel不会显示在屏幕上):
JLabel label = new JLabel("Greetings everyone this is Macklemore");
Font f = label.getFont();
String str = label.getText();
FontRenderContext frc = new FontRenderContext(null, true, true);
TextLayout tl = new TextLayout(str, f, frc);
add(label);
虽然这段代码确实存在(JLabel确实出现在屏幕上):
JLabel label = new JLabel("Greetings everyone this is Macklemore");
Font f = label.getFont();
String str = label.getText();
FontRenderContext frc = new FontRenderContext(null, true, true);
add(label);
TextLayout tl = new TextLayout(str, f, frc);
为什么TextLayout会干扰'添加(...)'? (这是在一个扩展JFrame的类中进行的方式)。这并不重要,因为无论如何它仍然有效,但我仍然有点好奇,看看是什么导致了这一点。
编辑:其余的代码在它不起作用的情况下看起来像这样(这包括建议的更改):
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
new Window(800, 400, "Project");
}
}
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Window extends JFrame {
private static final long serialVersionUID = -8255319694373975038L;
public Window(int width, int height, String title) {
setPreferredSize(new Dimension(width, height));
setMaximumSize(new Dimension(width, height));
setMinimumSize(new Dimension(width, height));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
setTitle(title);
setVisible(true);
setLayout(new FlowLayout());
JLabel label = new JLabel("Greetings everyone this is Macklemore");
//suggested change
Font f = new Font(label.getFont().getAttributes());
String str = label.getText();
FontRenderContext frc = new FontRenderContext(null, true, true);
TextLayout tl = new TextLayout(str, f, frc);
add(label);
}
}
P.S。我真的很讨厌这么长时间发布代码,但现在我确实需要解决这个问题。
答案 0 :(得分:0)
事实证明这一切只与setVisible(true)命令有关。如果你最后不这样做,这样的问题就会开始发生。虽然所描述的行为仍然很奇怪,但这个问题至少得到了答案。