1

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);
}   
}

私を助けてください。ここで何が問題なのかわかりません。また、追加後に再描画メソッドと検証を試みましたが、結果はありませんでした。

4

2 に答える 2

2

public Dimension getPreferredSize() GridBagLayout がパネルの大きさを認識できるように、LogoPanel クラスでオーバーライドしてみてください。

@nIcE cOw が指摘しているように、常にメソッドsuper.paintComponent(g)の最初の行として呼び出しますpaintComponent()

于 2013-06-21T16:55:07.960 に答える
0

setVisible(true)ロゴパネルで呼び出してみてください

于 2013-06-21T16:15:42.800 に答える