gpt4 book ai didi

Java Bufferedimage,JPanel 问题之上

转载 作者:行者123 更新时间:2023-12-01 15:43:16 25 4
gpt4 key购买 nike

所以这是我的问题,我的教授让我们制作一个绘画程序,在其中我们选择一个项目并在其上绘画。然而,问题是他希望我们在缓冲图像上绘图,然后将其放在 JPanel 之上。

到目前为止,几乎一切正常,您可以选择我设置的按钮之一,您可以绘制一个矩形并调整框架大小。当您执行此操作时,矩形图像不会消失,并且 JPanel 将扩展。但是,缓冲图像不会扩展,您可以在代码中看到,在我的 paintComponent 方法中,如果网格 == null,我会创建一个缓冲图像,如果是,则它会创建一个宽度和宽度的图像我的板的高度。当我尝试添加对此方法的调用时,它不会调整大小,因为网格不再等于 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 以反射(reflect)新的面板大小。然后将旧的缓冲图像绘制到新的图像上。当然,使用这种方法,如果面板缩小然后再次增大,数据将会丢失。

关于Java Bufferedimage,JPanel 问题之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7643001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com