Java 想在同一个类中创建JFrame和JPanel并拥有自己的paintComponent吗?

Java 想在同一个类中创建JFrame和JPanel并拥有自己的paintComponent吗?,java,swing,jframe,jpanel,paintcomponent,Java,Swing,Jframe,Jpanel,Paintcomponent,我试图在同一个类中创建一个简单的JFrame和JPanel,但我不想扩展JFrame或JPanel Java类。我还希望能够包括我自己的paintComponent(),它将覆盖面板绘制组件,以便我可以绘制我自己的绘制组件。我只想创建我的 JPanel p=newjpanel(); JFrame f=新的JFrame() 在一节课上。在某个时候,我会用它来尝试找到一种方法来减去和添加BuffereImage,但这是一个不同的问题 类别: import java.awt.Color; import

我试图在同一个类中创建一个简单的JFrame和JPanel,但我不想扩展JFrame或JPanel Java类。我还希望能够包括我自己的paintComponent(),它将覆盖面板绘制组件,以便我可以绘制我自己的绘制组件。我只想创建我的

JPanel p=newjpanel(); JFrame f=新的JFrame()

在一节课上。在某个时候,我会用它来尝试找到一种方法来减去和添加BuffereImage,但这是一个不同的问题

类别:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class SubtractBufferedImage {
    private static final long serialVersionUID = 1L;

    Dimension dimension = new Dimension(755,450);

    public SubtractBufferedImage() {

        JFrame f = new JFrame();
        JPanel d = new JPanel();/*User defined class that is above*/
        d.setBackground(Color.BLACK);

        f.add(new myPanel());
        f.setSize(745,440); 
        f.setSize(dimension);
        f.setResizable(false);
        f.setLocationRelativeTo(null);
        f.setTitle("Subtract Buffered Images");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SubtractBufferedImage t = new SubtractBufferedImage();

    }
}

class myPanel extends JPanel {
    private BufferedImage bTest1 = null;
    private BufferedImage bTest2 = null;

    Dimension dimension = new Dimension(755,450);

    private String iOne = "src/com/ddh/graphicsBook/CardImage/hold.jpg";
    private String iTwo = "src/com/ddh/graphicsBook/CardImage/draw.jpg";

    myPanel() {
        bTest1 = loadAnyImage(iOne);
        bTest2 = loadAnyImage(iTwo);
    }

    private BufferedImage loadAnyImage(String value){
        BufferedImage newImage = null;

        try {
            newImage = ImageIO.read(new File(value));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newImage;
    }

    private void drawImageToScreen(Graphics g,BufferedImage i,int x,int y){
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(i,x,y,null); 
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);  
            drawImageToScreen(g,bTest1,10,10);
            drawImageToScreen(g,bTest2,150,10);
    }
}

JPanel和JFrame都是Java类,而不是接口,因此基本上不能在它们内部实现自己的方法(根据坚实的规则,开放/封闭原则,它们是开放的,可以扩展,但可以修改)。要实现您自己的paintComponent,您必须扩展您的JPanel,这就是通常的做法。我不知道您为什么不愿意扩展这些类,但如果您这样做,您就可以实现规范的所有其他部分:

  • 您可以在扩展类中实现自己的paintComponent方法
  • 您可以在一个类中同时拥有JPanel的扩展和JFrame的扩展

好的,但是您在搜索类似问题/示例时尝试了什么?还有问题吗?如果不扩展类,您希望如何更改
paintComponent
方法?我快速查看了一下,但没有看到任何内容。我曾尝试将JFrame和JPanel放在同一个类中,这很容易,但是当您尝试添加一个paintComponent()时,从我所看到的情况来看,这并不是那么简单。但是,您确实扩展了JPanel。这里的问题到底是什么?我不想扩展JPanel?