我有以下代码片段,除非我将JFrame移出屏幕再返回,否则不会显示JLabel。到目前为止,我试图将布局从null更改为BorderLayout或FloatLayout而没有太多运气。有什么想法吗?
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);
答案 0 :(得分:2)
这一行:
frame.setVisible(true);
应该是程序中的最后一个,应该在将所有组件添加到程序后调用它。
您的代码的另一个问题是:
startPage.setLayout(null);
调用setLayout
null将破坏您的GUI,对于复杂的GUI来说似乎很容易,但here是在另一台具有不同分辨率,OS,PLAF的机器上运行它时会发生什么的一个很好的例子。使用layout managers中的一个或组合。
答案 1 :(得分:0)
你有两个解决方案,在完成布局后调用frame.invalidate()或在完成布局后调用setVisible(true);