我是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();
}
}
}
答案 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 );
}
}