Итак, вот моя проблема, мой профессор заставляет нас составить программу рисования, в которой мы выбираем предмет и рисуем его. Однако проблема в том, что он хочет, чтобы мы нарисовали буферизованное изображение, а затем поместили его поверх JPanel
.
На данный момент почти все работает, вы можете выбрать одну из кнопок, которые я настроил, вы можете нарисовать прямоугольник и изменить размер рамки. Когда вы сделаете это, изображение прямоугольника не исчезнет и JPanel
расширится. Однако буферизованное изображение не будет расширяться, вы можете увидеть в коде, что в моем методе paintComponent
я создаю буферизованное изображение, если сетка == ноль, и если это так, то это создает изображение шириной и высотой моей доски. Когда я пытаюсь добавить вызов к этому методу в любое другое время, он не изменяет размер, так как сетка больше не равна нулю. Я не знаю, как вызвать изменение размера буферизованного изображения.
Любые идеи были бы великолепны!
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();
}
}