3

JFrameクラスでnetbeansビルダーの「design」を使用しています。私は従来のJFrameを持っており、それに(ビルダーを使用して)JPanelを追加しました。

コードで、次のようにこのパネルに背景を追加したいと思います。

public class NewJFrame extends javax.swing.JFrame {

    public NewJFrame() {
        initComponents();
        addBackground();
    }

    private void addBackground()
    {
        Image bgImage;
        try {
            bgImage = ImageIO.read(new File("src/general/Mockup.png"));
            jPanel1.add(new NewJFrame.ImagePanel(bgImage));
            jPanel1.repaint();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String args[]) {

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
}

何も表示されません。空のJFrame/JPanelだけです。

ところで、私はこれをImagePanelコードに使用しています

@SuppressWarnings("serial")
class ImagePanel extends JPanel {
    private Image image;

    ImagePanel(Image image) {
        this.image = image;
    };

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
    }
}
4

3 に答える 3

5
  • クラスImagePanel extends JPanel {はオーバーライドgetPreferredSize()する必要があります、

  • public void paintComponent(Graphics g) {painting in SwingGraphics(2D))はコンテナにサイズを返さないため、単純にDimmension(0, 0)を返します。

  • JPanelAPIに実装されている(その子からのものFlowLayoutのみを受け入れる)場合、画面に表示されることはありませんPreferredSizecustom painting

于 2013-02-01T23:27:34.843 に答える
3

jPanel1とは何ですか?どのレイアウトを使用していますか?GUIがレンダリングされた後のImagePanelオブジェクトの大きさはどれくらいですか?これらすべての体操を行うのではなく、JFrameのcontentPaneとして画像(またはImagePanelインスタンス)を使用してJLabelを使用してみませんか?このタイプのコーディングは、NetBeansで生成されたコードの使用を避ける理由の1つであることに注意してください。自分でコーディングして、GUIが実行および表示するすべてを完全に制御できます。

于 2013-02-01T23:14:32.733 に答える
1

単純にJLabelを追加して、コンストラクターに画像名を挿入しないのはなぜですか?好き:

JFrame background = new JFrame( "back.png");

次に、このラベルをフレームまたはJPanelに直接追加できます。

于 2013-02-01T23:15:36.737 に答える