亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 swing 顯示另一個類的 BufferedImage

使用 swing 顯示另一個類的 BufferedImage

Helenr 2022-07-14 10:42:54
我創建了一個 GUI,它使用以下類打開文件選擇器: public class FileSelector {    File fp;    BufferedImage selectedFile;    public void SelectFile() {        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());        jfc.setDialogTitle("Select an image");        jfc.setAcceptAllFileFilterUsed(false);        FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG and jpeg images", "png", "jpg", "jpeg");        jfc.addChoosableFileFilter(filter);        int returnValue = jfc.showOpenDialog(null);        if (returnValue == JFileChooser.APPROVE_OPTION) {            fp = jfc.getSelectedFile();            System.out.println(fp);        }    }    public BufferedImage createBufferedImage() throws IOException {        ImageFileHandler img_handler = new ImageFileHandler();        if (fp.isFile() && fp.exists()) {            selectedFile = ImageIO.read(fp);            System.out.println(selectedFile);        }        BufferedImage bimage = new BufferedImage(28, 28, BufferedImage.TYPE_INT_ARGB);        // Draw the image on to the buffered image        Graphics2D bGr = bimage.createGraphics();        bGr.drawImage(selectedFile, 0, 0, null);        System.out.println(bimage);        bGr.dispose();        JFrame frame = new JFrame("Image from Desktop");        JLabel picLabel = new JLabel(new ImageIcon(bimage));        JPanel jPanel = new JPanel();        jPanel.add(picLabel);        frame.setSize(new Dimension(400, 300));        frame.add(jPanel);        frame.setVisible(true);        return bimage;    }}然后我有另一個類使用swing 來構建GUI。當前,所選圖像在單獨的 JFrame 中打開。我希望圖像顯示在主界面中displayPanel
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

下面演示如何繪制BufferedImage從另一個類中檢索到的。

它也可以用作MCVE的示例。MCVE 應該演示問題,而不是您的應用程序,并且不依賴于不可用的資源。

以下代碼可以復制粘貼到一個文件(Interface.java)中并運行:


import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.net.URL;

import javax.imageio.ImageIO;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.SwingUtilities;

import javax.swing.border.EtchedBorder;


public class Interface {


    private JFrame frame;


    public Interface(){

        initialize();

    }


    private void initialize() {

        frame = new JFrame();

        frame.setBounds(100, 100, 450, 300);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        //Button panel with open file and draw digit buttons

        JPanel buttonPanel = new JPanel();

        frame.getContentPane().add(buttonPanel, BorderLayout.NORTH);

        DrawPanel displayPanel = new DrawPanel();


        JButton openFileButton = new JButton("Open File");

        openFileButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                BufferedImage image = new FileSelector().createBufferedImage();

                displayPanel.setImage(image);

                frame.pack();

            }

        });


        buttonPanel.add(openFileButton);


        frame.getContentPane().add(displayPanel, BorderLayout.CENTER);

        frame.setVisible(true);

    }


    public static void main(String[] args) {

        SwingUtilities.invokeLater(()-> new Interface());

    }

}


class DrawPanel extends JPanel{


    private BufferedImage image;


    public DrawPanel() {

        setPreferredSize(new Dimension (150, 150));

        setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));

    }


    @Override

    public void paintComponent(Graphics g){

        super.paintComponent(g);

        if(image != null) {

            g.drawImage(image, 0,0, null);

        }

    }


    void setImage(BufferedImage image) {

        this.image = image;

        setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));

    }

}


class FileSelector {


    public BufferedImage createBufferedImage(){

        try {

            URL url = new URL("http://www.digitalphotoartistry.com/rose1.jpg");

            return ImageIO.read(url);

        } catch ( IOException ex) { ex.printStackTrace();}

        return null;

    }

}


查看完整回答
反對 回復 2022-07-14
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號