【问题标题】:icon not repainting in JoptionPane javaJoptionPane java中的图标未重新绘制
【发布时间】:2013-11-27 12:33:45
【问题描述】:

我的程序捕获屏幕的图像,调整大小并在 JoptionPane 图标文件中表示它们,以便用户可以决定天气或不保存它们。 问题是在执行 Joption.cancel 之后,图标会在用户下次捕获屏幕图像时显示上一个图像。在 Joption.ok 情况下,它工作正常。 知道为什么会这样吗?快照本身渲染得很好(每个快照都会捕获当前的屏幕图像,但一旦单击取消,图标就会显示前一个)。

  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);  

【问题讨论】:

  • 1) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 2) 为了尽快获得更好的帮助,请发帖SSCCE
  • new JFrame() 是第一个。错误的想法............,遵循第 1 条中描述的建议。在这里评论,只有在你想用 ... 做某事的情况下才能确定。
  • 我已经成功扩展了 JDialog。

标签: java swing joptionpane imageicon


【解决方案1】:

我已经通过使用 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多