簡體   English   中英

是否要在同一類中創建JFrame和JPanel並擁有自己的paintComponent?

[英]Want to create a JFrame and JPanel in the same class and have my own paintComponent?

我試圖在同一類中創建一個簡單的JFrame和JPanel,但是我不想擴展JFrame或JPanel Java類。 我還希望能夠包含我自己的paintComponent(),它將覆蓋面板繪畫組件,以便可以繪畫自己的繪畫組件。 我只想創建我的

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

一堂課 在某個時候,我將使用它來嘗試找到一種減去和添加bufferedimages的方法,但這是一個不同的問題。

類:

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類,而不是接口,因此您基本上不能在其中實現自己的方法(根據SOLID規則,Open / Closed原則,它們可以擴展但可以修改)。 要實現自己的paintComponent,必須擴展JPanel,這通常是這樣做的。 我不確定為什么不願意擴展這些類,但是如果這樣做,則可以實現其余所有規范:

  • 您可以在擴展類中實現自己的paintComponent方法,
  • 您可以在一個類中同時具有JPanel擴展和JFrame擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM