¿Por qué el método Java repintado () no funciona?
El siguiente código es una prueba muy simple que involucra una imagen. Debería volver a pintar una imagen cada vez que envíe "a" a System.in y debería salir del programa cada vez que envíe "q".
El problema es que solo la salida funciona: el método paint () nunca se llama, y no sé por qué.
Revisé la llamada a "super.paint ()", intenté reemplazar paint (Graphics g) con paintCompoenent (Graphics g) pero nada parece funcionar: simplemente no hay llamada.
¿El problema involucra al escáner en main ()?
La ruta en el programa no es la misma que usé, y la primera pintura es correcta, por lo que el problema no debería estar allí.
Nota: si es útil, estoy usando Eclipse Oxygen y Java9 SE
¡Gracias a todos!
pegar código:
public class TestImagePanel extends JPanel {
private BufferedImage image;
private int xpos = 0;
private int ypos = 0;
private String _imagePath = "//myFolder//image.png";
public TestImagePanel() {
try {
image = ImageIO.read(new File(_imagePath));
} catch (IOException ex) {}
}
public void paint(Graphics g) {
super.paint(g);
System.out.println("painting LOG");
g.drawImage(image, this.xpos++, this.ypos++, this);
}
public void update(String a) {
System.out.print("Receiving:" + a + "---" + xpos + ":" + ypos);
if (a.equals("a"))
repaint();
else if (a.equals("q")) {
System.out.println("LOGOUT");
System.exit(0);
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("test");
TestImagePanel testimg = new TestImagePanel();
frame.add(new TestImagePanel());
frame.setSize(new Dimension(600, 600));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Scanner in = new Scanner(System.in);
while (true)
testimg.update( in .next());
}
}