Java 只能在 JFrame 上显示 1 个图像



我正在尝试在屏幕上显示两个不同的图像。 其中一个是位于我JFrame顶部的横幅,另一个是我只是随机放置在横幅下方以进行测试。我遇到的问题是,虽然我可以通过将类 WindowStructure 的对象添加到我的窗口来在屏幕上显示单个图像,但我无法一次显示多个图像。屏幕上仅显示添加到窗口的最后一个图像:

下面是窗口类:

import javax.swing.JFrame;
public class Window extends JFrame {
    public Window(String name) {
    super(name);
    setSize(1200, 700);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    WindowStructure banner = new WindowStructure("Beatles Logo.jpg", 0, 0, getWidth(), 75);
    WindowStructure fireball = new WindowStructure("fireball.png", 100, 100, 100, 100);
    add(banner); //banner
    add(fireball);
    setVisible(true);
    while(true){
        repaint();
    }
}
public void paint(Graphics g
) {
        super.paintComponents(g);
    }
}

下面是创建映像的实际类:

public class WindowStructure extends JPanel {
    ImageIcon imageIcon;
    int xLoc, yLoc, xSize, ySize;
    public WindowStructure(String bannerImg, int xLoc, int yLoc, int xSize, int ySize){
        URL bannerImgURL = getClass().getResource(bannerImg);
        imageIcon = new ImageIcon(bannerImgURL);
        this.xLoc = xLoc;
        this.yLoc = yLoc;
        this.xSize = xSize;
        this.ySize = ySize;
    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(imageIcon.getImage(), xLoc, yLoc, xSize, ySize, null);
    }
}

JFrame 的默认布局管理器是 BorderLayout。正如文档所说:"BorderLayout 将缺少字符串规范解释为与常量 CENTER 相同"。例如:

add(banner);  // Same as p.add(banner, BorderLayout.CENTER); 
add(fireball);  // Same as p.add(fireball, BorderLayout.CENTER);

如果将位置指定为 add() 的第二个参数,则可以解决此问题:

add(banner, BorderLayout.NORTH);
add(fireball, BorderLayout.CENTER);

或者,您可以通过在 Window 类构造函数中调用 setLayout(LayoutManager) 来为 JFrame 使用另一个布局管理器。

public class Window extends JFrame {
    public Window(String name) {
    super(name);
    setLayout(new FlowLayout()); // or another the layout that best fit your needs...
    ...

布局管理器指南:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

JFrame javadocs 声明使用的默认布局管理器是 BorderLayout。要添加多个组件,您必须在布局中指定不同的位置来放置每个组件(NORTHSOUTHEASTWESTCENTER)。默认情况下,如果未指定,则BorderLayout.CENTER,这就是为什么您只看到最后一个添加的内容。

相关内容

  • 没有找到相关文章

最新更新