我的程序捕获屏幕的图像,调整大小并在JoptionPane图标字段中表示它们,以便用户可以决定是否保存它们。问题是,在执行Joption.cancel之后,下次用户捕捉屏幕图像时,图标会显示上一个图像。在Joption.ok的情况下,它运行良好。知道为什么会发生这种事吗?快照本身渲染得很好(每个快照都会捕捉到当前的屏幕图像,但单击cancel后图标会显示上一个)。
rszedSnp=ImageMagick.resize(origSnp_name,30);
ImageIcon icon=new ImageIcon(rszedSnp);
String userIput = (String)JOptionPane.showInputDialog(
new JFrame(),
"Save as:n",
"taking screen shot",
JOptionPane.PLAIN_MESSAGE,
icon ,
null,
origSnp_name);
我使用JDialog解决了这个问题,实现的JPanel包含一个保存图像的JLabel,而不是在JOptionPane#showInputDialog函数中使用图像图标。
BufferedImage img = ImageIO.read(new File(image));
resize(img);
JLabel lbl = new JLabel(new ImageIcon(img));
lbl.setVisible(true);
JPanel imgPan = new JPanel();
imgPan.add(new JScrollPane(lbl))
JDialog dialog = new JDialog();
JPanel globalPan = new JPanel(new GridLayout(2,2));
globalPan.add(imgPan);
dialog.add( globalPan );
dialog.pack();
dialog.setVisible(true);