抱歉,我知道关于此主题有很多信息,但我仍然受阻。我有两个面板mainPanel和sidePanel。我想要做的是将图像绘制到sidePanel上。我的sidePanel将具有其他组件,例如按钮和标签。我可以使用JLabel将图像添加到sidePanel中,但是,图像的大小和位置是一个问题。因此,我正在尝试使用Graphics g将Image绘制到sidePanel上。如果有人可以提供帮助,将不胜感激。谢谢所有的帮助。`import java.awt.BorderLayout;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;



       public class Gui extends JFrame {
    private JPanel j;
    private ImageIcon i;

    public Gui(){
        this.setSize(800,600);
        this.setUp();
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void setUp(){
        j = new JPanel();
        JPanel contentPanel = new JPanel();
        contentPanel.setLayout(new BorderLayout());
        contentPanel.setSize(new Dimension(800,600));
        JPanel mainPanel = new JPanel();
        JPanel sidePanel = new JPanel();

        sidePanel.setPreferredSize(new Dimension(200,600));
        mainPanel.setPreferredSize(new Dimension(600,600));

        ImagePanel v = new ImagePanel();
        //v.setBackground(Color.BLUE);
        v.setPreferredSize(new Dimension(100,100));

        sidePanel.add(v);

        mainPanel.setBackground(Color.BLACK);
        sidePanel.setBackground(Color.RED);


        contentPanel.add(sidePanel, BorderLayout.WEST);
        contentPanel.add(mainPanel, BorderLayout.CENTER);

        this.add(contentPanel);


    }
       private class ImagePanel extends JPanel{
        public void createImage(Graphics g){
            super.paintComponent(g);
            ImageIcon i = new       ImageIcon("/GUI Practice/src/images.jpeg");
            Image ii = i.getImage();
            g.drawImage(ii, 10, 10, 90, 90, Color.WHITE, this);

            repaint();
            validate();
            updateUI();



        }

    }
           public static void main(String [] args){

        Gui g = new Gui();

    }

  }
`

最佳答案

取自bcash的答案here

public class ImagePanel extends JPanel {

    private BufferedImage image;

    public ImagePanel() {
       try {
          image = ImageIO.read(new File("image name and path"));
       } catch (IOException ex) {
            // handle exception...
       }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null); // see javadoc for more info on the parameters
    }

}

10-08 18:18