我正在使用Eyetribe开展一个项目,我需要将图像全屏显示才能使其有效运行。 我目前正在绘图。但由于某种原因,它只绘制了我之前绘制的图像,而不是在主程序中使用它。 在我的测试程序中,我刚刚制作了一个方法,我在绘制图像以查看它是否有效。它工作得很好。 然后我写了一个主要程序,我绘制图像,出于某种原因,它只显示我使用我的测试程序绘制的图像。之前我认为没有足够的时间来渲染,因为我在一秒钟内画了22次。但现在我只绘制一次,然后再不触及绘图方法。但它似乎仍然只显示我之前绘制的图像。此外,在我的主程序中,我使用Eyetribe,每秒更新至少22次。这可能是它不画画的原因吗?
更新:要解决上述问题,我现在正在使用paintComponent。我现在只是在图像之间切换问题。在方法下面,最初调用showFrame来绘制。然后我按下右箭头时使用switchImageTest来切换图像。在密钥监听器方法中,我基本上更新了图像索引并调用了switchImageTest。任何人都可以指出我正确的方向,为什么它不起作用?
我用来绘制的方法如下:
图像是我想要绘制的图像。
最初调用以构建框架/标签等的方法。
public void showFrame(int imageIndex) throws IOException{
System.out.println("Does it come here");
if(testImagesList != null){
//img = new ImageIcon(testImagesList.get(0));
//BufferedImage img1 = ImageIO.read(new File(testImagesList.get(0)));
}
jF.setUndecorated(true);
//System.out.println(testImagesList.get(0));
System.out.println(testImagesPath);
System.out.println("AbsolutePath=");
System.out.println(testImagesPath.get(0));
//System.out.println(testImagesA);
//jF.add(new PanelForImages((new File(testImagesAbsoluteFilePaths.get(imageIndex)))));
jF.add(new Component() {
// BufferedImage img = ImageIO.read(file);
//BufferedImage img1 = ImageIO.read(new File(testImagesPath.get(1)));
BufferedImage img3 = ImageIO.read(new File(testImagesAbsoluteFilePaths.get(imageIndex)));
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(img3, 0, 0, getWidth(), getHeight(), this);
}
});
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
gs.setFullScreenWindow(jF);
jF.validate();
}
我用来在图像之间切换的方法。我正在使用右箭头键切换,似乎工作正常。它只是我没有使用测试程序绘制的图像没有显示。
public void switchImageTest(int imageIndex ) throws IOException{
jF.add(new Component(){
BufferedImage img = ImageIO.read(new File(testImagesAbsoluteFilePaths.get(imageIndex)));
@Override
public void paint(Graphics g){
super.paint(g);
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
repaint();
}
});
//GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
//GraphicsDevice gs = ge.getDefaultScreenDevice();
//gs.setFullScreenWindow(jF);
//jF.repaint();
jF.revalidate();
}
我希望这篇文章对每个人都有意义。如果有任何疑问,请告诉我,我会尽力解释一下。
更新:管理解决它,下面是更新的代码。
public class PanelForImages extends JPanel{
private BufferedImage image;
public PanelForImages(File image) throws IOException{
//this.image = image;
//URL resource = getClass().getResource("so2.jpg");
this.image = ImageIO.read(image);
}
@Override
public void paintComponent(Graphics g){
//super.paint(g);
//super.paintComponents(g);
super.paintComponent(g);
//g.drawImage(image, 3, 4, this);
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
g.drawString("HELLOOOOOOOOOOOOOOOOOOOOOOOO", 400, 400);
//repaint();
}
}
显示帧和切换图像的功能
public void showFrame(int imageIndex) throws IOException{
System.out.println("Does it come here");
if(testImagesList != null){
//img = new ImageIcon(testImagesList.get(0));
//BufferedImage img1 = ImageIO.read(new File(testImagesList.get(0)));
}
jF.setUndecorated(true);
//System.out.println(testImagesList.get(0));
System.out.println(testImagesPath);
System.out.println("AbsolutePath=");
System.out.println(testImagesPath.get(0));
//System.out.println(testImagesA);
//jF.add(new PanelForImages((new File(testImagesAbsoluteFilePaths.get(8)))));
jF.add(panelForImages);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
gs.setFullScreenWindow(jF);
jF.validate();
}
public void switchImageTest(int imageIndex ) throws IOException{
//jF.add(new PanelForImages(new File(testImagesAbsoluteFilePaths.get(imageIndex))));
jF.remove(panelForImages);
panelForImages.removeAll();
File currentImage = new File(testImagesAbsoluteFilePaths.get(imageIndex));
this.panelForImages = new PanelForImages(currentImage);
jF.add(panelForImages);
jF.validate();
}