Почему флаг внутри метода paint всегда ложен?
В приведенной ниже программе я просто пытаюсь переместить коробку на экране на основе нажатой клавиши.Я должен очистить последнее положение коробки и нарисовать ее новое положение .Когда флаг имеет значение true я буду очистить экран и, когда флаг имеет значение false, я буду рисовать его на экране но значение флага ложно, оно не меняется внутри нажатия клавиши(KeyEvent e) способ съемки класс.
Удалите оператор комментария внутри метода paint(Graphics g) класса Shoot, и u обнаружит, что флаг всегда ложен.
Почему это так?
Заранее спасибо ;)
import java.awt.Color; import java.awt.event.KeyEvent; import javax.swing.JPanel; import java.awt.event.KeyListener; import java.awt.Color; import java.awt.Graphics; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; /** * * @author Dev Parzival */ public class Shoot extends JPanel implements KeyListener,WindowListener{ int x=300,y=300; int width=50,height=50; boolean flag=false; @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_LEFT){ flag=true; repaint(); x--; flag=false; repaint(); } if(e.getKeyCode()==KeyEvent.VK_RIGHT){ flag=true; repaint(); x++; flag=false; repaint(); } } @Override public void paint(Graphics g){ //System.out.println(flag); if(flag){ g.setColor(getBackground()); g.drawRect(x, y, width, height); g.setColor(Color.black); } else g.drawRect(x, y, width, height); } @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) { } public static void main(String $[]){ JFrame frame =new JFrame(); frame.setSize(700,700); Shoot shoot=new Shoot(); shoot.setSize(700,700); frame.addKeyListener(shoot); frame.addWindowListener(shoot); frame.add(shoot); frame.setVisible(true); } }
Что я уже пробовал:
@Override public void paint(Graphics g){ System.out.println(flag); if(flag){ g.setColor(getBackground()); g.drawRect(x, y, width, height); g.setColor(Color.black); } else g.drawRect(x, y, width, height); }
Значение флага всегда будет ложным.