簡體   English   中英

Java緩沖圖像,JPanel發行版之上

[英]Java Buffered Image, ontop of JPanel Issue

所以這是我的問題,我的教授正在讓我們制定一個繪畫程序,在其中選擇一個項目並在其上繪圖。 但是,問題是他希望我們繪制一個緩沖圖像,然后將其放在JPanel之上。

到目前為止,幾乎所有功能都可以使用,您可以選擇我設置的按鈕之一,可以繪制矩形並調整框架的大小。 當您這樣做時,矩形的圖像將不會消失, JPanel將擴展。 但是,緩沖的圖像不會擴展,您可以在代碼中看到,如果grid == null,則在我的paintComponent方法中將制作一個緩沖的圖像,如果它是網格,則將創建圖像的寬度和高度。 當我嘗試在其他任何時間添加對此方法的調用時,由於網格不再等於null,因此它不會調整大小。 我不知道如何在緩沖的圖像上調用調整大小。

任何想法都很棒!

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;
import java.awt.event.*;
import java.awt.image.BufferedImage;


/**
 *
 * @author Calvin Moss
 */
public class Drawing extends JPanel implements MouseListener
{

  public int x1, x2 ,y1, y2;
  public static Drawing instance;

  BufferedImage grid;
  static Graphics2D gc;

  Drawing()
  {
    setBackground(Color.RED);
    addMouseListener(this);
  }

  public static Drawing getInstance()
  {
    if(instance == null)
      instance =  new Drawing();
    return instance;      
  }

  public void paintComponent(Graphics g)
  {     
    super.paintComponent(g);  
    Graphics2D g2 = (Graphics2D)g;

    int w = Board.getInstance().getWidth();
    int h = Board.getInstance().getHeight(); 
    if(grid == null)
    {
      grid = (BufferedImage)(this.createImage(w,h));
      gc = grid.createGraphics();
      gc.setColor(Color.BLUE);
      BufferedImage grid;
      Graphics2D gc;
    }
    g2.drawImage(grid, null, 0, 0);
    check();
  }

  public void draw()
  {
    Graphics2D g = (Graphics2D)getGraphics();
    int w = x2 - x1;
    if (w<0)
      w = w *(-1);
    int h = y2-y1;
    if (h<0)
      h=  h*(-1);

    switch(Main.choice)
    {      
      case 1:
      {
        System.out.println("double gay");
        gc.drawLine(x1, y1, x2, y2);
        repaint();
        break;
      }
      case 2:
      {
        check();
        System.out.println("quad gay");
        gc.drawRect(x1, y1, w, h);
        repaint();
        break;
      }
    }
  }

  public void check()
  {
    if (x1 > x2)
    {
      int z = 0;
      z = x1;
      x1 = x2;
      x2 =z;
    }
    if (y1 > y2)
    {
      int z = 0;
      z = y1;
      y1 = y2;
      y2 = z;
    }
  }

  public void mouseExited(MouseEvent e){}
  public void mouseEntered(MouseEvent e){}

  public void mouseClicked(MouseEvent e){ 
    System.out.println("Gay");
  }

  public void mousePressed(MouseEvent evt)
  {
    x1 = evt.getX();
    y1= evt.getY();
  }

  public void mouseReleased(MouseEvent evt)
  {
    x2 = evt.getX();
    y2 = evt.getY();
    draw();
  }

}

將BufferedImage設置為桌面的大小,則不必擔心調整大小。

或者,將ComponentListener添加到面板中。 調整組件大小時,創建一個新的BufferedImage以反映新的面板大小。 然后將舊的緩沖圖像繪制到新圖像上。 當然,如果面板縮小然后再次增長,則將丟失數據。

暫無
暫無

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

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