【问题标题】:Strange setBackground() error - Java Swing奇怪的 setBackground() 错误 - Java Swing
【发布时间】:2014-03-08 12:33:01
【问题描述】:
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);
    }
}

当我执行这个时,我得到的只是一个蓝色的小方块嵌套到“这是一个句子”字符串。我什么都试过了!

【问题讨论】:

标签: java swing jpanel setbackground


【解决方案1】:

您需要将框架的布局设置为doesn't 尊重其子项的首选大小的布局。 FlowLayout 确实如此,而您的 JPanel 在没有添加任何组件或指定首选尺寸的情况下没有首选尺寸。

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

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

Layout out Components Withing a Container查看更多信息

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

【讨论】:

  • 非常感谢你,伙计! :)
猜你喜欢
  • 1970-01-01
  • 2020-07-12
  • 2012-05-03
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 2023-01-02
  • 2011-11-27
  • 1970-01-01
相关资源
最近更新 更多