JComponent が画像の背景で表示されない
JComponent が背景画像に対して表示されないという問題に直面しています。これは、画像のレンダリングに JPanel と JLabel が正しく使用されていないことが原因である可能性があります。
画像のレンダリングに JPanel を使用する
コード内で、画像を次のように追加しています。 JPanel:
mainp.add(picLabel, c);
これは正しいように見えますが、描画できるのは画像そのものではなく、画像自体のみです。コンポーネント。背景画像も維持しながらコンポーネントを表示するには、次のようにカスタム JPanel に直接描画する必要があります:
public class CustomJPanel extends JPanel { private BufferedImage image; public CustomJPanel(BufferedImage image) { this.image = image; } @Override public Dimension getPreferredSize() { return (new Dimension(image.getWidth(), image.getHeight())); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, this); } }
その後、このカスタム JPanel にコンポーネントを追加できます:
CustomJPanel customPanel = new CustomJPanel(ImageIO.read(new File("bgd.png"))); mainp.add(customPanel);
画像レンダリングに JLabel を使用する
あるいは、画像レンダリングに JLabel を使用できます。ただし、コンポーネントを正しく表示するには、その opaque プロパティを true に設定していることを確認してください:
JLabel picLabel = new JLabel(new ImageIcon(ImageIO.read(new File("bgd.png")))); picLabel.setOpaque(true); mainp.add(picLabel);
コンポーネントをメイン JPanel に追加していることを確認してください:
c.gridx = 0; c.gridy = 1; gusername = new JTextField(); picLabel.add(gusername, c);
次の手順に従います。を使用すると、カスタム JPanel を使用する場合でも、JLabel を正しく構成する場合でも、JComponent が背景画像に対して表示されるようにすることができます。
以上がJava で背景画像を使用すると、JComponent が非表示になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。