0

データがデータベースに送信されたときに、JPanel の背景画像をリロードする必要があります。データベースから画像を取り込む JPanel を作成します。そして、画像を更新して送信すると、背景が自動的に変更されます。repaint() と revalidate() も使用しようとしましたが、うまくいきません。アプリケーションを再起動して再度実行する必要があります。動作します。

これは、JPanel で背景を表示するための私のコードです。

public void getLogo(Company company, PanelCompany view) {
        JPanel panel = new BackgroundImage(company.getLogoBlob());
        panel.revalidate();
        panel.setVisible(true);
        panel.setBounds(10, 10, 120, 120);
        view.getPanelPhoto().add(panel);
}

これは私のヘルパークラスです:

public class BackgroundImage extends JPanel{
    private Image image;

    public BackgroundImage (InputStream input) {
        try {
            image = ImageIO.read(input);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void paintComponent(Graphics grphcs) {
        super.paintComponent(grphcs);
        Graphics2D gd = (Graphics2D) grphcs.create();
        gd.drawImage(image, 0, 0, getWidth(), getHeight(), this);
        gd.dispose();
    }
}

解決策はありますか?ご清聴ありがとうございました:)

4

1 に答える 1

2

まず、ヘルパー クラスで独自のサイズを設定する必要があります。

次に、のGraphicsインスタンスを使用する必要がありますJPanel

public class BackgroundImage extends JPanel{
    private Image image;

    public BackgroundImage (InputStream input) {
        try {
            image = ImageIO.read(input);
            setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void paintComponent(Graphics grphcs) {
        super.paintComponent(grphcs);
        Graphics2D g2d = (Graphics2D) grphcs;
        g2d.drawImage(image, 0, 0, getWidth(), getHeight(), this);
    }
}

呼び出しは次のようになります。

public void getLogo(Company company, PanelCompany view) {
        JPanel panel = new BackgroundImage(company.getLogoBlob());
        view.getPanelPhoto().add(panel);
}

クラスはレイアウト マネージャーを使用する必要PanelCompanyがあります。OracleのVisual Guide to Layout Managers を参照してください。

一つを選ぶ。

于 2013-03-13T14:21:50.693 に答える