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