显示图像,Java

时间:2015-08-27 12:55:16

标签: java image swing

我是Java GUI新手,在显示图片时出现问题。我的目的是显示一个大图像,并允许用户点击图像的区域,以指示某些功能的位置。无论如何,尽管阅读了Oracle的解释和其他解决方案,但我还是得到了一个粗略的开始,因为我甚至无法显示图像。

我创建了一个JFrame并使用其setContentPane()方法添加了JPanel和JLabel。我使用JLabel的setIcon()方法向其添加图像,或者至少是我的意图...

任何建议都值得赞赏,特别是如果有更好的方法可以做到这一点。我将使用OpenCV处理图像,并计划在显示之前将它们转换为Java图像(或BufferedImage)。

这是代码。我省去了库以节省空间。

public class C : A, B
{        
    public void DoStuff<T>()
    {
        // ... DoStuff<T> implementation here ...
    }

    void A.DoStuff()
    {
        Console.WriteLine("A");
    }

    void B.DoStuff()
    {
        Console.WriteLine("B");
    }
}

GUI类:

public class Pathology {
    public static void main(String[] args) {
        PrimaryFrame primaryFrame = new PrimaryFrame(); 
        primaryFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
        primaryFrame.setSize(1500, 900);
        primaryFrame.setVisible( true );        
        primaryFrame.setContentPane(primaryFrame.getGui()); 

        try {
            primaryFrame.setImage(ImageIO.read(new File("C:\\Users\\Benjamin\\Pictures\\Pathology\\C\\001.png")));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

2 个答案:

答案 0 :(得分:4)

如果我告诉你,你只需要将primaryFrame.setVisible( true );放到主方法的末尾,你会嘲笑我吗? :)

为了进一步理解,每次要在框架中添加/更新某些内容时(例如,在ActionListener中),您都不必调用frame.setVisible(true)。相反,您可以拨打frame.revalidate()frame.repaint()。 (框架可以用特定面板替换)

答案 1 :(得分:2)

setVisible(true)致电之后,您需要setImage()

primaryFrame.setImage(ImageIO.read(new
    File("C:\\Users\\Benjamin\\Pictures\\Pathology\\C\\001.png")));

因为setVisible()之后对GUI的任何更新都不会显示。

就是这样,代码应该是这样的:

public class Pathology {
    public static void main(String[] args) {
        PrimaryFrame primaryFrame = new PrimaryFrame(); 
        primaryFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
        primaryFrame.setSize(1500, 900);
        primaryFrame.setContentPane(primaryFrame.getGui()); 

        try {
            primaryFrame.setImage(ImageIO.read(new File(
                "C:\\Users\\Benjamin\\Pictures\\Pathology\\C\\001.png")));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        primaryFrame.setVisible( true );
    }
}