【发布时间】:2017-02-24 15:30:20
【问题描述】:
我在下面有这个 JFrame:
public class TestJFrame extends JFrame {
public RecyclingMachinesGui(String title) {
super (title);
Container container = getContentPane();
container.setLayout(new FlowLayout());
Panel r = new Panel();
Jbutton j = new JButton("Recycle Item");
r.add(j);
container.add(r);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(500,500);
setVisible(true);
}
private class Panel extends JPanel {
private BufferedImage image;
public Panel() {
try {
image = ImageIO.read(new File("./temp.png"));
}catch (IOException e) {
e.getMessage().toString();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
}
在上面的代码中,当我出于某种原因运行new TestJFrame() 时,我只在Panel(我添加到我的容器中)中看到JButton j,而在面板中看不到图像。我的 Panel 中的 paintComponent 方法没有被调用吗?
我想在面板的顶部有一张图片,在底部有一个按钮。谁能解释为什么这没有发生?
【问题讨论】:
-
图片加载了吗?如果要在顶部显示图像并在面板上显示按钮,请使用
BorderLayout,将图像包裹在JLabel中并将其添加到中心位置并将按钮添加到南位置 -
为
Panel类使用边框布局? -
应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 embedded-resource 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。
-
@1290 不,
contentPane之一 -
但是我不想在面板上设置边框布局吗?所以我可以把图像放在 NORTH 上,把按钮放在 SOUTH 上?