Also arbeite ich an einem Projekt, bei dem zwischen Bildern gewechselt werden muss. Die Bilder müssen im Vollbildmodus sein. Es scheint mir zwei Probleme zu geben. Zuerst ist mit dem Bildwechsel. Wenn ich zwischen den Bildern wechsle, erscheinen einige Bilder beim Wechsel OK. Andere scheinen überhaupt nicht auf dem Bildschirm zu erscheinen. Ich scheine nur einen leeren Rahmen zu bekommen. Zweitens scheint die richtige Taste jedes Mal zu funktionieren, aber nur für meinen Verstand, habe ich Systemdrucke. Die Systemausgänge scheinen nicht auf der Konsole zu erscheinen, aber sie wechseln die Bilder im Rahmen (obwohl ich manchmal einen leeren Rahmen bekomme). Alle Vorschläge/Lösungen würden sehr geschätzt.JFrame zeigt nicht alle Bilder im Vollbild an
Hinweis zum Code: Die Zeichenfolgen, die ich habe, dienen zum Testen der Koordinaten. Ich benutze einen Eyetribe, also um zu zeigen, wo ich hinschaue. Der Kordelzug scheint perfekt zu funktionieren. Außerdem rufe ich switchImage sehr schnell, fast 22 Mal in einer Sekunde. Könnte das ein Problem sein? Obwohl es mich wundern lässt, warum es für einige Bilder funktioniert und nicht für andere. UPDATE: Das Problem scheint in g.drawImage zu sein. Es scheint nicht für einige Bilder zu zeichnen, aber ich kann nicht herausfinden, warum das passiert. Derzeit ist dies mein Code für Vollbild-Bilder.
public void showFrame(){
//jL -> JLabel
//jF -> JFrame
//jP -> Panel
jF.setTitle("Test");
jF.setUndecorated(true);
jF.setResizable(false);
jF.setVisible(true);
Toolkit tk = Toolkit.getDefaultToolkit();
int xsize = (int)tk.getScreenSize().getWidth();
int ysize = (int)tk.getScreenSize().getHeight();
jF.setSize(xsize, ysize);
jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
if(testImagesList != null){
img = new ImageIcon(testImagesList.get(0));
}
Image imag = img.getImage();
bi = new BufferedImage(1280, 800, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
g.drawImage(imag, 0, 0, 1280, 800, null);
ImageIcon newIcon = new ImageIcon(bi);
jL.setIcon(newIcon);
jF.add(jL);
jP.add(jL);
jF.add(jP);
jF.validate();
}
Um zwischen Bildern zu wechseln, verwende ich einen Schlüsselhörer. Der keyListner ruft den Switch-Bildcode auf. Beide sind unten angegeben.
public void switchImage(ImageIcon image, JFrame jF, JLabel jL, JPanel jP, GazeData gazeData){
Image imag = image.getImage();
BufferedImage bi = new BufferedImage(1280, 800, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.drawImage(imag, 0, 0, 1280, 800, null);
g.setColor(Color.black);
int x = (int) gazeData.smoothedCoordinates.x;
int y = (int) gazeData.smoothedCoordinates.y;
Font font = new Font("Verdana", Font.BOLD, 16);
g.setFont(font);
String text = "hello(" + gazeData.smoothedCoordinates.x + gazeData.smoothedCoordinates.y + ")";
g.drawString(text, x, y);
g.drawString("Fixed Coordinate at (400, 500)", 400, 500);
ImageIcon newIcon = new ImageIcon(bi);
jL.setIcon(newIcon);
jP.add(jL);
jF.validate();
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
// j.switchImage(image, jF, jL, jP, gazeData);
System.out.println("RightDetected");
imageIndex++;
ImageIcon newImage = new ImageIcon(imageList.get(imageIndex));
if(newImage != null){
this.currentImage = newImage;
System.out.println("IMAGE SWITCHED!!!! Current Image="+imageList.get(imageIndex));
j.switchImage(currentImage, j.jF, j.jL, j.jP, currentGazeData);
}
}
}
Danke für mich dort zu korrigieren. Entschuldige, ich habe eine Pause von diesem Projekt gemacht, aber ich bin jetzt zurück. Also, was ich gerade realisiert habe, ist, wenn ich ein Bild in einem anderen Programm zeichne und nichts anderes mache, d. H. DrawImage nur einmal aufruft, scheint es das Bild zu zeichnen. Danach zeichnet es auch das Bild in meinem Hauptprogramm. Dies scheint mir, dass ich es nicht genug Zeit gebe, um zu rendern, und ich versuche wieder zu zeichnen. Ich versuche einen Weg zu finden, damit ich es einmal kennenlernen kann. Ich habe gewechselt, also zeichne ich nur einmal wenn ich umstelle und nicht 22 mal in einer Sekunde. Das hat aus irgendeinem Grund immer noch nicht geholfen. – paddy