奇怪的setBackground()错误 - Java Swing

时间:2014-03-08 12:33:01

标签: java swing jpanel setbackground

import java.awt.*;
import javax.swing.*;

public class JFrameGUI extends JFrame 
{
    JLabel item1;
    public JFrameGUI(int l, int b , String Title)
    {
        setTitle(Title);
        setLayout(new FlowLayout());
        setSize(l, b);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        item1 = new JLabel("This is a Sentence.");
        item1.setToolTipText("This is gonna show up on hover.");
        add(item1);
    }

    public static void main(String[] args)
    {
        JFrameGUI g = new JFrameGUI(1280,720,"The End Of The Line");
        JPanel p = new JPanel();
        p.setBackground(Color.BLUE);
        g.add(p);
    }
}

当我执行此操作时,我得到的只是一个小的蓝色方形嵌套到“这是一个句子”字符串。我已经尝试了一切!

1 个答案:

答案 0 :(得分:2)

您需要将框架的布局设置为doesn't尊重其子项的首选大小的布局。 FlowLayout会这样做,而JPanel没有首选大小而没有添加任何组件,或指定首选大小。

一个简单的修复,将框架的布局设置为BorderLayout,或者根本不设置布局,因为JFrame已经有默认BorderLayout。请注意,您可能希望将JLabel添加到JPanel而不是JFrame。除非您 想要添加JFrame而不是后台JPanel,否则您需要为您不想要的位置指定BorderLayout位置中心。

您可以看到this answer以查看哪些布局管理器尊重首选尺寸,哪些不符合

Layout out Components Withing a Container

了解详情

此外,setVisible(true)应该是添加所有组件之后 的事情。