Java JLabel在帧移出屏幕并再次返回之前不会出现
我有以下代码片段,其中JLabel不会显示,除非我将JFrame移出屏幕并再次移入。我尝试将布局从null更改为BorderLayout或FloatLayout,但迄今为止运气不佳。有什么想法吗Java JLabel在帧移出屏幕并再次返回之前不会出现,java,swing,jframe,jlabel,Java,Swing,Jframe,Jlabel,我有以下代码片段,其中JLabel不会显示,除非我将JFrame移出屏幕并再次移入。我尝试将布局从null更改为BorderLayout或FloatLayout,但迄今为止运气不佳。有什么想法吗 public class StartPage extends Main{ // Global variables private JPasswordField passField = new JPasswordField(); private String infoLabel = "<html
public class StartPage extends Main{
// Global variables
private JPasswordField passField = new JPasswordField();
private String infoLabel = "<html>Bla, bla some text</html>";
// CONSTRUCTOR
public StartPage() {
frame.setSize(1400, 1000);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
startPage.setBounds(0, 0, 1400, 1000);
startPage.setLayout(null);
frame.getContentPane().add(startPage);
// TITLE LABEL
JLabel lblTitle = new JLabel("My Title");
lblTitle.setForeground(Color.RED);
lblTitle.setHorizontalAlignment(SwingConstants.CENTER);
lblTitle.setFont(new Font("Arial Black", Font.BOLD, 30));
lblTitle.setBounds(190, 150, 1000, 85);
startPage.add(lblTitle);
// TEXT LABEL
JLabel areaText = new JLabel(infoLabel, SwingConstants.CENTER);
areaText.setVerticalAlignment(SwingConstants.CENTER);
areaText.setBounds(315, 220, 750, 300);
areaText.setFont(new Font("Arial Black", Font.PLAIN, 15));
areaText.setVisible(true);
startPage.add(areaText);
公共类起始页扩展了主{
//全局变量
private JPasswordField passField=new JPasswordField();
私有字符串infoLabel=“Bla,Bla some text”;
//建造师
公共起始页(){
框架设置尺寸(1400、1000);
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setresizeable(false);
起始页后退(0,0,1400,1000);
startPage.setLayout(空);
frame.getContentPane().add(开始页);
//标题标签
JLabel lblTitle=新JLabel(“我的头衔”);
lblTitle.setForeground(颜色:红色);
Lblitle.设置水平对齐(旋转恒温器中心);
lblTitle.setFont(新字体(“Arial黑色”,Font.BOLD,30));
lblTitle.立根(190、150、1000、85);
起始页。添加(lblTitle);
//文本标签
JLabel areaText=新的JLabel(信息标签,SwingConstants.CENTER);
areaText.setVerticalAlignment(SwingConstants.CENTER);
区域文本.立根(315220750300);
setFont(新字体(“Arial黑色”,Font.PLAIN,15));
areaText.setVisible(真);
开始页。添加(区域文本);
您有两种解决方案,完成布局后调用frame.invalidate(),或完成布局后调用setVisible(true)
frame.setVisible(true);
应该是程序中的最后一个,应该在将所有组件添加到程序中后调用它startPage.setLayout(null);
调用setLayout
null将破坏您的GUI,对于复杂的GUI来说这似乎很容易,但这是一个很好的例子,说明当您在另一台具有不同分辨率、操作系统、PLAF等的机器上运行它时会发生什么。请使用其中一种或多种方法的组合我已经在最后调用了
startPage.setVisible(true)
,只是忘了将其添加到上面的代码段中。或者您是指整个框架,因为startPage只是一个面板?您必须调用frame.setVisible而不是其他字段。JFrame是窗口。否则您需要调用frame.invalidate()在方法的最后谢谢。问题是我在添加所有组件之前验证了JFrame。正确的答案是在我的构造函数的最后调用frame.setVisible(true)
,这正是我的意思--不要调用setVisible(true)
在JFrame上,直到添加完所有组件。否则它们将无法可靠显示。此外,除非您喜欢困难的调试会话,否则请避免绝对定位。非常感谢,这解决了问题。您是个天才