Created a Program similar to paint where there is a rectangle whose movement inside the screen can be controlled by "w,a,s,d" keys and its size increased or decreased using the scroller on the mouse. There are also several buttons of various colours which when pressed fills the rectangular shape with the respective colours. I'm also trying to paint with this rectangle ie. when I press the space bar I want to fill the colour which is selected at the specified area. Now even though I can do that. The next action I do ie. either pressing "w,a,s,d" keys or the scroller, the colour disappears. Now I know that the colour or fillRect() has to be saved somehow so that the next action doesn't affect it, but I've tried several ways but it isn't happening. I've tried to use a loop to store the values of the rectangle so that each time it repaints it will repaint on all of the values contained inside the loop. But this isn't working. If its not working due to some miscalculation do say that, if not and this method of using loops is wrong please do suggest other simple methods to do this.
So Basically what I'm trying to do is when pressing the space bar I want an imprint of the rectangle of that colour and when I move the rectangle away. I want that imprint to stay there.
Note: I know my code is poor and not all viable but I'm doing this project with what we were taught and I hope you will provide the solution along the lines of this.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Animation extends Frame implements KeyListener, MouseWheelListener, ActionListener {
int x,y,a,b;
char choice1;
int draw=1;
int defaultValue=0;
int n=0;
int color1,color2,color3;
Button button1,button2,button3,button4,button5,button6,button7,button8,button9,button10,button11;
Animation() {
setSize(1000, 1000);
setVisible(true);
x = 500;
y = 500;
a = 20;
b = 50;
JPanel panel = new JPanel();
button1 = new Button("Black");
button2 = new Button("Blue");
button3 = new Button("Green");
button4 = new Button("Orange");
button5 = new Button("Red");
button6 = new Button("Yellow");
button7 = new Button("Gray");
button8 = new Button("Cyan");
button9 = new Button("Magenta");
button10 = new Button("Pink");
button11 = new Button("Default");
panel.add(button1);panel.add(button2);panel.add(button3);panel.add(button4);panel.add(button5);
panel.add(button6);panel.add(button7);panel.add(button8);panel.add(button9);panel.add(button10);
panel.add(button11);
add(panel);
// button1.setBounds(50,680,50,20); button2.setBounds(120,680,50,20);
// button3.setBounds(190,680,50,20); button4.setBounds(260,680,50,20);
// button5.setBounds(330,680,50,20); button6.setBounds(400,680,50,20);
// button7.setBounds(470,680,50,20); button8.setBounds(540,680,50,20);
// button9.setBounds(610,680,50,20); button10.setBounds(680,680,50,20);
button1.setFocusable(false);
button2.setFocusable(false);
button3.setFocusable(false);
button4.setFocusable(false);
button5.setFocusable(false);
button6.setFocusable(false);
button7.setFocusable(false);
button8.setFocusable(false);
button9.setFocusable(false);
button10.setFocusable(false);
button11.setFocusable(false);
button1.addActionListener(this);button2.addActionListener(this);
button3.addActionListener(this);button4.addActionListener(this);
button5.addActionListener(this);button6.addActionListener(this);
button7.addActionListener(this);button8.addActionListener(this);
button9.addActionListener(this);button10.addActionListener(this);
button11.addActionListener(this);
addKeyListener(this);
addMouseWheelListener(this);
addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
});
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
choice1 = e.getKeyChar();
if (choice1 == 'w') {
y = y - 10;
}
if (choice1 == 's') {
y = y + 10;
}
if (choice1 == 'a') {
x = x - 10;
}
if (choice1 == 'd') {
x = x + 10;
}
if(choice1 == ' '){
draw=2;
}
repaint();
}
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
double p = e.getPreciseWheelRotation();
if(p>0){
a=a+5;
b=b+5;
} else{
a=a-5;
b=b-5;
}
repaint();
}
@Override
public void actionPerformed(ActionEvent e) {
defaultValue = 0;
if(e.getActionCommand().equals("Black")){
color1 = 0;
color2 = 0;
color3 = 0;
}
if(e.getActionCommand().equals("Blue")){
color1 = 0;
color2 = 0;
color3 = 255;
}
if(e.getActionCommand().equals("Green")){
color1 = 0;
color2 = 255;
color3 = 0;
}
if(e.getActionCommand().equals("Orange")){
color1 = 255;
color2 = 165;
color3 = 0;
}
if(e.getActionCommand().equals("Red")){
color1 = 255;
color2 = 0;
color3 = 0;
}
if(e.getActionCommand().equals("Yellow")){
color1 = 255;
color2 = 255;
color3 = 0;
}
if(e.getActionCommand().equals("Gray")){
color1 = 169;
color2 = 169;
color3 = 169;
}
if(e.getActionCommand().equals("Cyan")){
color1 = 0;
color2 = 255;
color3 = 255;
}
if(e.getActionCommand().equals("Magenta")){
color1 = 255;
color2 = 0;
color3 = 255;
}
if(e.getActionCommand().equals("Pink")){
color1 = 255;
color2 = 192;
color3 = 203;
}
if(e.getActionCommand().equals("Default")){
defaultValue = 1;
}
repaint();
}
public void paint(Graphics g) {
super.paint(g);
if(draw==1) {
if(defaultValue == 1){
g.setColor(new Color(color1,color2,color3));
g.drawRect(x, y, a, b);
}else{
g.drawRect(x, y, a, b);
g.setColor(new Color(color1,color2,color3));
g.fillRect(x,y,a,b);
}
}
if(draw==2){
g.setColor(new Color(color1,color2,color3));
int[] temp1 = new int[50];
temp1[n] = x;
int[] temp2 = new int[50];
temp2[n] = y;
int[] temp3 = new int[50];
temp3[n] = a;
int[] temp4 = new int[50];
temp4[n] = b;
n++;
for (int i=0;i<n;i++){
g.drawRect(x, y, a, b);
g.fillRect(temp1[i],temp2[i],temp3[i],temp4[i]);
}
draw=1;
}
}
public static void main(String[] args) {
Animation animation = new Animation();
}
}