Java Jframe上的图像渲染

3

我已经从C#转到Java,但无法在Java Jframe 上渲染图像。是否有ImageBox组件或JFrame方法能够呈现以下所示的图像:

JPictureBox box=new JPictureBox("image_path");
JFrame fram=new JFrame();
fram.add(box); 

1
看起来你需要的是 JLabel。使用它的 JLabel.setIcon(...) 方法。希望这个小 例子 或者这个详细的 答案 能对这个主题有所帮助 :-) - nIcE cOw
但是这个东西会在整个JFrame上呈现图像,它并没有提供缩放图像的方法。 - Cody
2
@Cody 缩放是一项昂贵的操作,而且并非所有 Swing 组件都提供该功能。您可以查看此示例此示例此示例以获取更多关于该主题及相关问题的讨论。 - MadProgrammer
@Cody:尝试使用Graphics2D进行操作,它提供了用于“缩放/变换”相关功能的方法。 - nIcE cOw
1
@Cody,可以参考这个链接(https://dev59.com/8oPba4cB1Zd3GeqPqlFW#25798462)来了解如何制作组件(它使用`JButton`但概念适用于`JLabel`)。但要记住,`JLabel`有很多其他选项,包括文本,文本和图标的水平和垂直对齐等,所以它可能不是最佳解决方案的基础。 - MadProgrammer
如何使用标签,这将是基本答案。链接 - MadProgrammer
1个回答

1

这段代码创建了一个 JFrame 并在该框架中显示路径为 f 的文件。它使用了一个 JLabel,如其中一位评论者建议的那样。

    public static void display(String f) throws Exception {
        JFrame jf = new JFrame();
        JLabel jl = new JLabel(new ImageIcon(ImageIO.read(new File(f))));
        jf.add(jl);
        jf.setBounds(0, 0, 200, 200);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

请注意,您可能希望更好地处理异常,从图像中设置大小(您可以询问ImageIO.read()的结果以获取.getWidth().getHeight()),等等。
以下是一个稍微复杂一些的示例,其中图像的大小会更改以填充其边界:
    public static void display(final String f) throws Exception {
        JFrame jf = new JFrame();
        JPanel jp = new JPanel() {
            private BufferedImage bi = ImageIO.read(new File(f));
            public void paint(Graphics g) {
                Graphics2D g2 = (Graphics2D)g;
                RenderingHints rh = new RenderingHints(
                    RenderingHints.KEY_INTERPOLATION,
                    RenderingHints.VALUE_INTERPOLATION_BICUBIC);
                g2.setRenderingHints(rh);

                int w = getWidth();
                int h = getHeight();
                g.drawImage(bi, 0, 0, w, h, null);
            }
        };
        jf.add(jp);
        jf.setBounds(0, 0, 400, 200);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

注意:在阅读评论中的链接后,我不得不推荐MadProgrammer关于这个主题的详尽帖子。这个答案唯一的优点是它的简短长度 - 但如果你想要更好的缩小图像, 保持比例缩放或其他深入的与图像相关的内容,请跟随那些链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接