为什么将JFrame调整大小后添加图像

坦维

框架的大小设置为500x500,但是当我向其中添加图像时,框架将调整为图像的大小。我尝试使用这个

jf.setPreferredSize(new Dimension(500, 500));

但随后该图像将不会显示。

import java.awt.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
import java.awt.event.*;
public class Test implements ActionListener {
ImageIcon imgIcon;
  JFrame jf ;
  JPanel jp_image,jp_option;
  BufferedImage img;
  Test(){
        jf = new JFrame("photo editor");
        jf.setPreferredSize(new Dimension(500, 500));
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jp_image = new JPanel();
        jp_option = new JPanel();

        jp_image.setPreferredSize(new Dimension(200, 500));
        jp_option.setPreferredSize(new Dimension(300, 500));

        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true, jp_option,  jp_image);
        jf.getContentPane().add(splitPane);
        jf.setSize(1900, 1000);
        JMenuBar mbar = new JMenuBar();
        jf.setJMenuBar(mbar);
        JMenu File = new JMenu("File");
        JMenuItem New;
        File.add(New = new JMenuItem("New..."));
        mbar.add(File);
        jf.setVisible(true);
        New.addActionListener(this); 
  }


  public void actionPerformed(ActionEvent ae){
      String arg = ae.getActionCommand();
        if(arg.equals("New...")){
                File file = null;
                JFileChooser chooser = new JFileChooser();
                FileNameExtensionFilter filter = new FileNameExtensionFilter(" jpg,gif,jpeg,png", "jpg", "gif" , "jpeg" , "png");
                chooser.setFileFilter(filter);
                int returnVal = chooser.showOpenDialog(null);
                if(returnVal == JFileChooser.APPROVE_OPTION) {
                    System.out.println("File Choosed: " + chooser.getCurrentDirectory() + "\\" +chooser.getSelectedFile().getName());
                    file = chooser.getSelectedFile();
                }           
                try{
                    img = ImageIO.read(file);
                    jp_image.add(new JLabel(new ImageIcon(img)));
                    jp_image.setSize(300, 500); 
                    jf.setPreferredSize(new Dimension(500, 500));// no image appears
                    //jf.pack();    the image appears but the frame resizes     
                }
                catch(Exception e){
                    System.out.println("No Image Selected");
                }
        }


    }

  public static void main(String args[]){
      Test t = new Test();
  }
}

如何在不调整框架大小的情况下在面板中设置图像。

充满鳗鱼的气垫船

您正在将组件添加到GUI,但没有告诉组件的容器的布局管理器您正在执行此操作。添加JLabel后,请确保在容器上调用repaint()revalidate()例如:

img = ImageIO.read(file);
jp_image.add(new JLabel(new ImageIcon(img)));
jp_image.setSize(300, 500);
jf.setPreferredSize(new Dimension(500, 500));// no image appears
jp_image.revalidate();
jp_image.repaint();

甚至更好-在创建GUI时仅添加JLabel一次,并且在获取图像时不要重新添加它,而只需设置其Icon。例如:

public class Test implements ActionListener {
    ImageIcon imgIcon;
    JFrame jf;
    JPanel jp_image, jp_option;
    BufferedImage img;
    private JLabel imageLabel = new JLabel();

    Test() {
        // ...

        jp_image.add(imageLabel); //!!

        // ...
    }

    public void actionPerformed(ActionEvent ae) {
        String arg = ae.getActionCommand();
        if (arg.equals("New...")) {
            // ...

            try {
                img = ImageIO.read(file);
                imageLabel.setIcon(new ImageIcon(img)); //!!
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么srcset调整图像大小?

来自分类Dev

在PIL中调整大小后将图像上传到Imgur

来自分类Dev

我为什么要调整上传图像的大小

来自分类Dev

Xcode 5,为什么不调整图像大小?

来自分类Dev

为什么调整大小会导致图像尺寸减小

来自分类Dev

为什么 cv::drawKeypoints 会调整我的图像大小?

来自分类Dev

上传后调整图像大小

来自分类Dev

调整大小后显示图像

来自分类Dev

加载后调整图像大小

来自分类Dev

为什么在设置约束后无法再调整NSWindow的大小?

来自分类Dev

调整JFrame大小后,JScrollPane折叠

来自分类Dev

为什么要调整PV的大小而不是添加新的PV?

来自分类Dev

为什么添加约束会消除调整NSWindow大小的能力?

来自分类Dev

为什么将Imagemagick或GraphicsMagick调整为较小尺寸时会增加我的PNG图像的MB大小?

来自分类Dev

调整JFrame的大小以适合调整后的JPanel

来自分类Dev

如何将调整大小后的图像的坐标转换为原始图像的坐标?

来自分类Dev

为什么我的图像调整大小代码总是生成完整的黑色输出图像?

来自分类Dev

为什么需要调整第一个图像的大小以融合两个图像?

来自分类Dev

为什么我的图像调整大小代码总是生成完整的黑色输出图像?

来自分类Dev

调整图像大小后检测公差颜色

来自分类Dev

调整大小后获取图像尺寸

来自分类Dev

UITableViewCell图像旋转后未调整大小

来自分类Dev

调整大小后浮出div的图像

来自分类Dev

为什么Netbeans设计人员将JFrame大小设置为与我指定的大小不同?

来自分类Dev

添加元素后调整JList的大小

来自分类Dev

添加内容后调整小部件的大小

来自分类Dev

右侧调整Jframe的大小

来自分类Dev

为什么以CSS为中心时我的图像停止调整大小

来自分类Dev

为什么在ListView中显示时,最初异步调整大小的图像太大?

Related 相关文章

  1. 1

    为什么srcset调整图像大小?

  2. 2

    在PIL中调整大小后将图像上传到Imgur

  3. 3

    我为什么要调整上传图像的大小

  4. 4

    Xcode 5,为什么不调整图像大小?

  5. 5

    为什么调整大小会导致图像尺寸减小

  6. 6

    为什么 cv::drawKeypoints 会调整我的图像大小?

  7. 7

    上传后调整图像大小

  8. 8

    调整大小后显示图像

  9. 9

    加载后调整图像大小

  10. 10

    为什么在设置约束后无法再调整NSWindow的大小?

  11. 11

    调整JFrame大小后,JScrollPane折叠

  12. 12

    为什么要调整PV的大小而不是添加新的PV?

  13. 13

    为什么添加约束会消除调整NSWindow大小的能力?

  14. 14

    为什么将Imagemagick或GraphicsMagick调整为较小尺寸时会增加我的PNG图像的MB大小?

  15. 15

    调整JFrame的大小以适合调整后的JPanel

  16. 16

    如何将调整大小后的图像的坐标转换为原始图像的坐标?

  17. 17

    为什么我的图像调整大小代码总是生成完整的黑色输出图像?

  18. 18

    为什么需要调整第一个图像的大小以融合两个图像?

  19. 19

    为什么我的图像调整大小代码总是生成完整的黑色输出图像?

  20. 20

    调整图像大小后检测公差颜色

  21. 21

    调整大小后获取图像尺寸

  22. 22

    UITableViewCell图像旋转后未调整大小

  23. 23

    调整大小后浮出div的图像

  24. 24

    为什么Netbeans设计人员将JFrame大小设置为与我指定的大小不同?

  25. 25

    添加元素后调整JList的大小

  26. 26

    添加内容后调整小部件的大小

  27. 27

    右侧调整Jframe的大小

  28. 28

    为什么以CSS为中心时我的图像停止调整大小

  29. 29

    为什么在ListView中显示时,最初异步调整大小的图像太大?

热门标签

归档