Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java repaint()方法未调用paintComponent()_Java_Image_Swing_Graphics_Paintcomponent - Fatal编程技术网

Java repaint()方法未调用paintComponent()

Java repaint()方法未调用paintComponent(),java,image,swing,graphics,paintcomponent,Java,Image,Swing,Graphics,Paintcomponent,对于我的程序,我目前想使用open按钮打开JFileChooser并选择一个图像,然后在小程序左侧的JPanel上绘制它,我知道正在检索该文件,但当我重新绘制图形上下文时,什么也没有发生。提前谢谢 import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; i

对于我的程序,我目前想使用open按钮打开JFileChooser并选择一个图像,然后在小程序左侧的JPanel上绘制它,我知道正在检索该文件,但当我重新绘制图形上下文时,什么也没有发生。提前谢谢

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;

public class FinalProject390 {

    public static void main(String[] args) {
        createAndShowGUI();

    }

    private static void createAndShowGUI() {
        JFrame f = new JFrame("Final Project");

        f.setSize(1025, 520);

        f.add(new GraphicsPanel());
        f.add(new MainPanel());
        f.setVisible(true);

    }
}

class MainPanel extends JPanel implements ActionListener {
    JButton openButton = new JButton("Open");
    JButton newButton = new JButton("New");
    JButton saveButton = new JButton("Save");
    JButton saveAsButton = new JButton("Save As");
    JButton drawLineButton = new JButton("Draw Line");
    JButton drawRectangleButton = new JButton("Draw Rectangle");
    JButton drawOvalButton = new JButton("Draw Oval");
    JButton drawArcButton = new JButton("Draw Arc");
    JButton extractPixelDataButton = new JButton("Extract Pixel Data");
    JButton convoluteButton = new JButton("Convolute");
    JTextField xPosStartField = new JTextField("x-Position Start");
    JTextField yPosStartField = new JTextField("y-Position Start");
    JTextField xPosEndField = new JTextField("x-Position End");
    JTextField yPosEndField = new JTextField("y-Position End");
    JTextField angleStartField = new JTextField("Angle Start");
    JTextField angleSizeField = new JTextField("Angle Size");

    public MainPanel() {

        openButton.setBounds(660, 50, 100, 30);
        openButton.addActionListener(this);
        newButton.setBounds(780, 50, 100, 30);
        saveButton.setBounds(900, 50, 100, 30);
        drawLineButton.setBounds(660, 110, 160, 30);
        drawRectangleButton.setBounds(840, 110, 160, 30);
        drawOvalButton.setBounds(660, 155, 160, 30);
        drawArcButton.setBounds(840, 155, 160, 30);
        extractPixelDataButton.setBounds(660, 220, 160, 30);
        convoluteButton.setBounds(840, 220, 160, 30);

        xPosStartField.setBounds(660, 280, 100, 30);
        yPosStartField.setBounds(660, 320, 100, 30);
        xPosEndField.setBounds(660, 380, 100, 30);
        yPosEndField.setBounds(660, 420, 100, 30);
        angleStartField.setBounds(900, 280, 100, 30);
        angleSizeField.setBounds(900, 320, 100, 30);

        setLayout(null);
        setBackground(Color.green);
        setBounds(641, 0, 370, 480);

        add(openButton);
        add(newButton);
        add(saveButton);
        add(drawLineButton);
        add(drawRectangleButton);
        add(drawOvalButton);
        add(drawArcButton);
        add(extractPixelDataButton);
        add(convoluteButton);
        add(xPosStartField);
        add(yPosStartField);
        add(xPosEndField);
        add(yPosEndField);
        add(angleStartField);
        add(angleSizeField);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        javax.swing.JFileChooser fileChooser = new JFileChooser();
        BufferedImage bin = null, bi = null;
        GraphicsPanel gPanel = new GraphicsPanel();

        fileChooser.setCurrentDirectory(new File(System
                .getProperty("user.home")));

        int result = fileChooser.showOpenDialog(null);

        if (result == javax.swing.JFileChooser.APPROVE_OPTION) {
            File selectedFile = fileChooser.getSelectedFile();
            System.out.println("Selected file: "
                    + selectedFile.getAbsolutePath());
            try {
                bin = ImageIO.read(new File(selectedFile.getAbsolutePath()));
            } catch (IOException e1) {
                e1.printStackTrace();
            }

            gPanel.setImg(bin);

        }

    }
}
    class GraphicsPanel extends JPanel {
        BufferedImage bi = null, bin = null;

        public GraphicsPanel() {
            setLayout(null);
            setBackground(Color.blue);
            setSize(640, 480);
            setLocation(0, 0);

        }

        public void setImg(BufferedImage b) {
            this.bi = b;
            repaint();

        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

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

        }
    }

这看起来像是一个家庭作业,而不是直接用代码回答,请考虑以下内容:

  • 在方法
    createAndShowGUI()
    中,实例化
    GraphicsPanel
    对象并将其添加到
    JFrame
  • actionPerformed()
    方法中,实例化另一个
    GraphicsPanel
    对象(该对象从未添加到JFrame),然后调用
    setImage()
您的图像不会显示,因为添加到
JFrame
GraphicsPanel
控件与您设置图像的
GraphicsPanel
控件不同


我希望这将足以帮助您修复代码。

您是对的,这是一个家庭作业,感谢您没有明确说明需要做什么,并给我必要的信息来解决问题。