【问题标题】:GridBagLayout doesn't display JPanel componentGridBagLayout 不显示 JPanel 组件
【发布时间】:2013-06-22 00:55:07
【问题描述】:

我需要帮助,因为我的 JPanel 组件没有显示在另一个组件中。我曾经使用过这种布局,所以我在这方面有一些经验,但在这种情况下仍然存在问题。请不要回答使用其他布局管理器。我的大部分项目都是基于 GridBagLayout 的。

所以它是我的父容器:

public class MainArea extends WorkArea
{
private static final long serialVersionUID = 1L;
private GridBagConstraints gbc;
private LogoPanel logo;

public MainArea()
{
    gbc = new GridBagConstraints();
    logo = new LogoPanel();
    JTextField tf = new JTextField(20);
    gbc.gridx = 0;
    gbc.gridy = 0;
    add(logo,gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    add(tf,gbc);
}
}

布局管理器在 WorkArea 类中设置,它肯定是正确的。我添加的 JTextField 仅用于测试,它与徽标不同,显示正确。这是徽标代码:

public class LogoPanel extends JPanel
{
private BufferedImage image;

public LogoPanel()
{
    File imageFile = new File("images/Logo.jpg");
    try
    {
        image = ImageIO.read(imageFile);
    }
    catch (IOException e)
    {
        System.err.println("Blad odczytu logo");
        e.printStackTrace();
    }
}

@Override
public void paintComponent(Graphics g)
{
    Graphics2D g2d = (Graphics2D) g;
    Screen screen = Screen.getInstance();
    g2d.drawImage(image, screen.getScreenWidth()/2-200, screen.getScreenHeight()/2-100, this);
}   
}

请帮助我。我不知道这里可能出了什么问题。我也尝试了重绘方法并在添加后验证但没有结果。

【问题讨论】:

  • 你在哪里给super.paintComponent(g)打电话?你确定它能够很好地加载图像吗?如果不能,请看这个线程,如何add images to your Java Project

标签: java swing gridbaglayout


【解决方案1】:

尝试覆盖public Dimension getPreferredSize() 在您的 LogoPanel 类中,以便 GridBagLayout 知道您的面板有多大。

正如@nIcE cOw 指出的那样,始终将super.paintComponent(g) 作为paintComponent() 方法的第一行调用。

【讨论】:

    【解决方案2】:

    尝试在您的徽标面板上拨打setVisible(true)

    【讨论】:

    • 我解决了使用 setPreferredSize 到 LogoPanel 的问题。这很奇怪,因为如果我使用不同的布局,则不需要。谢谢建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多