【问题标题】:JAVA - Add an image to JPanelJAVA - 将图像添加到 JPanel
【发布时间】:2016-08-20 10:22:22
【问题描述】:

我是 JAVA 新手。 我想在我的窗口(JPanel)中获取一个图像来处理它(例如添加圆圈)。 我创建了一个菜单,当我单击“文件>导入”时,会出现打开对话框来选择我的图像。我得到了图像文件的正确路径(检查了 System.out.println(FC.getSelectedFile().toString());)但图像没有出现......

代码如下:

        //On crée les listeners pour le menu "Fichier" :
        this.importer.addActionListener(new ActionListener()
        {
              public void actionPerformed(ActionEvent event)
              {
                  //On ouvre la boîte de dialogue pour charger le dessin :
                  JFileChooser FC = new JFileChooser();
                  FC.showOpenDialog(null);
                  BufferedImage myPicture=null;
                try {
                    myPicture = ImageIO.read(FC.getSelectedFile());
                    System.out.println(FC.getSelectedFile().toString());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                  contenant.add(new JLabel(new ImageIcon(myPicture)), BorderLayout.CENTER);
                  contenant.repaint();
              }
          });

感谢您的支持。

【问题讨论】:

  • 尝试只发布代码的相关部分,这里是图片相关部分
  • 你试过用GOOGLE吗?
  • 我把代码删减到只得到相关部分。
  • 事实上,我的代码似乎可以工作,但只有当我手动(用鼠标)更改窗口大小时...知道吗?

标签: java image jframe jpanel


【解决方案1】:

替换这个:

contenant.repaint();

有了这个:

contenant.revalidate();

当您添加 JLabel 时,它不会自动强制内容窗格整理其布局,因此即使 JLabel 在那里,它还没有调整大小。调用 revalidate() 可以解决这个问题。

【讨论】:

  • 感谢 Drewll,但在 Eclipse 中我有这个错误:“方法 revalidate() 未定义容器类型”。确实,contenant 是一个容器:private Container contenant;.
  • 我创建了一个 JPanel 来使用 revalidate() 方法。感谢您的帮助。
猜你喜欢
  • 2012-07-12
  • 2018-01-14
  • 2018-09-02
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2017-09-07
  • 2010-09-22
  • 2013-12-16
相关资源
最近更新 更多