【发布时间】:2015-07-20 13:22:58
【问题描述】:
我一直在尝试使用 Swing Timer 更新插入到 GUI 的 BufferedImage。 最初,我使用通过控制器实例获得的 BufferedImage 创建了 ImageIcon,然后将其添加到 JLabel(字段)。然后在 GUI 上显示当前图像。 这里是来自 GUI 类中初始代码的代码 sn-p。
JLabel field;
ImageIcon icon;
BufferedImage image = this.controller.getCameraImage();
icon = new ImageIcon(image);
field= new JLabel (icon);
现在我尝试每 x 秒获取一个 BufferedImage 。 为此,我使用了 Swing Timer 类,但不幸的是我未能成功。 我使用 ActionListener 创建了以下类,以便每 3 秒使用 getCameraImage 方法检索一个新图像。
这里是带有 ActionListener 类的 UpdateImage:
public class UpdateImage {
private JLabel label;
private Timer timer;
private Controller controller;
private int delay = 3000; // every 3 seconds
private ImageIcon icon;
private BufferedImage image;
public UpdateImage(Controller controller) throws Exception {
this.controller = controller;
ActionListener action = new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
try {
System.out.println("image update");
label = new JLabel();
image = controller.getCameraImage();
label.setIcon(new ImageIcon(image));
} catch (CallError | InterruptedException e) {
e.printStackTrace();
}
}
};
timer = new Timer(delay, action);
timer.setInitialDelay(0);
timer.start();
}
public JLabel getLabel() {
return label;
}
}
在将 BufferedImage 设置为 ImageIcon 后,我使用 getLabel 方法检索它。 然后将此组件添加到 GUI。
public class GUI{
UpdateImage update;
//more code
JLabel field;
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
try {
new UpdateImage(controller);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
field = update.getLabel( );
//more code
}
字符串“图像更新”每 3 秒根据需要在控制台上显示一次。 但图像不会显示在 GUI 上。
如果有人可以通过给我一些提示或指出我做错了什么来帮助我,我将不胜感激。
【问题讨论】:
标签: java swing user-interface