createImagePane()
方法是创建一个窗口显示一幅图像,等待sec秒后自动关闭或者按Enter关闭,正常效果如下所示:
现在是把这个方法放进了JButton组件的addActionListener()
中,想法是点击然后出现上面的内容,但是却出现了下图这种情况:
而且点击窗口的关闭按钮也没有反应。
如果将此方法放进Timer中没有问题,直接在其他类中调用也没有反应,就是在JButton中出现了问题。
createImagePane()方法如下:
public class ConfirmPane extends JFrame {
public static void createImagePane(int sec, String[] imgPath) {
new ConfirmPane().showImageResult(sec, imgPath);
}
showImageResult(int seconds, String[] path) {
// 省略实现代码
setSize(1280, 720);
setTitle("出错警示");
setResizable(false);
setLayout(null);
centerWindow(this);
Image logo = Toolkit.getDefaultToolkit().getImage(resFolderPath + "image\\logo.png");
setIconImage(logo);
JButton confirm = new JButton("确认");
ImageGui imageGui = new ImageGui(result, null);
imageGui.setBounds(0, 0, 1280, 720);
confirm.setBounds(1180, 600, 80, 40);
confirm.setVisible(true);
add(imageGui);
add(confirm);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
confirm.addActionListener(evt -> {
keyCode = 0;
dispose();
});
confirm.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
keyCode = e.getKeyCode();
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == 10 && keyCode == 10) {
dispose();
} else {
dispose();
}
}
});
setVisible(true);
while (keyCode == -1 && i < seconds) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
}
dispose();
}
}
调用代码如下:
public class Test extends JFrame {
public Test() {
String[] path = {"over~D:/Images/0902/20190831175455-3-Miss.jpg", "right~D:/Images/0902/20190831175455-3-Miss.jpg",
"over~D:/Images/0902/20190831175455-3-Miss.jpg", "right~D:/Images/0902/20190831175455-3-Miss.jpg"};
setSize(300, 300);
JButton jButton = new JButton("显示");
jButton.addActionListener(e -> createImagePane(10, path));
add(jButton);
setVisible(true);
}
public static void main(String[] args) {
System.load(System.getProperty("user.dir") + "\\lib\\opencv_java320.dll");
new Test();
}
}
注:ImageGui是其他人写的类,功能是显示一幅图像窗体