Tendo quatro quadrados desenhados na tela preciso que, ao clicar na tecla 1, ative o quadrado no canto superior esquerdo. Usando as setas do teclado quer-se que seja possível mover esse quadrado ao longo da tela. Para os outros quadrados será o mesmo raciocínio, por exemplo: ao clicar na tecla 2 ativa o quadrado do canto superior direito e com as setas move-se o quadrado.
Eu tenho já criadas 3 classes: a classe Janela, Tela e Quadrados.
Executando o package exercicioteste (composto pelas 3 classes) abre uma tela com os 4 quadrados.
package exercicioteste; import javax.swing.JFrame; public class Janela extends JFrame{ Janela() { add(new Tela()); setTitle("Minha Janela"); setSize(500,500); setVisible(true); } public static void main(String[] args) { new Janela(); } }
package exercicioteste; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.BorderFactory; import javax.swing.JPanel; public class Tela extends JPanel implements KeyListener { Quadrados q = new Quadrados(); private static final long serialVersionUID = 1L; public Tela() { addKeyListener(this); //faz cumprir as funcionalidades do teclado setFocusable(true); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; q.desenha(g2d); //desenha os quadrados } @Override public void keyPressed(KeyEvent tecla) { switch(tecla.getKeyCode()) { case KeyEvent.VK_1: //seleciona o 1ºquadrado break; case KeyEvent.VK_2: //seleciona o 2ºquadrado break; case KeyEvent.VK_3: //seleciona o 3ºquadrado break; case KeyEvent.VK_4: //seleciona o 4ºquadrado break; case KeyEvent.VK_RIGHT: break; case KeyEvent.VK_LEFT: break; } } @Override public void keyReleased(KeyEvent arg0) { } @Override public void keyTyped(KeyEvent arg0) { } }
package exercicioteste; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics2D; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.border.Border; public class Quadrados { int posInicialX; int posInicialY; public void desenha(Graphics2D g2d) { GeneralPath c; //cria os quadrados Rectangle2D.Double r = new Rectangle2D.Double(10, 10, 50, 50); Rectangle2D.Double r2 = new Rectangle2D.Double(420, 10, 50, 50); Rectangle2D.Double r3 = new Rectangle2D.Double(10, 390, 50, 50); Rectangle2D.Double r4 = new Rectangle2D.Double(420, 390, 50, 50); //desenha os quadrados g2d.draw(r); g2d.draw(r2); g2d.draw(r3); g2d.draw(r4); //pinta os quadrados g2d.fill(r); g2d.fill(r2); g2d.fill(r3); g2d.fill(r4); } /*public void setBorder(Border createLineBorder) { }*/ }