在JFrame中显示JPanel的网格?

时间:2015-01-30 18:38:24

标签: java swing layout-manager

我对Java很新,但对C ++有一些经验。这是一项家庭作业,所以我真的只是想找人帮我指明正确的方向。

分配需要JFrame JPanel个对象,以13x4网格显示牌组中的每张牌。教授为我们提供了一些代码,以帮助我们开始:

import javax.swing.*;
import java.awt.*;

public class Main

public static void main(String[] args)
{
    //load the card image from the gif file.
    final ImageIcon cardIcon = new ImageIcon("cardImages/tenClubs.gif");

    //create a panel displaying the card image
    JPanel panel = new JPanel()
    {
        //paintComponent is called automatically by the JRE whenever
        //the panel needs to be drawn or redrawn
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            cardIcon.paintIcon(this, g, 20, 20);
        }
    };

    //create & make visible a JFrame to contain the panel
    JFrame window = new JFrame("Title goes here");
    window.add(panel);
    window.setPreferredSize(new Dimension(200,200));
    window.pack();
    window.setVisible(true);
}
}

我尝试了一些东西,但似乎无法显示多个面板。我应该使用gridLayout()功能吗?或者只创建多个面板并在框架中指定每个面板的位置?

再次,如果有人能指出我正确的方向,那将是非常棒的。

2 个答案:

答案 0 :(得分:1)

要显示相同大小的元素,均匀分布在容器中,那么是的,GridLayout将是一个不错的选择。

如果您需要在网格中显示首选大小(每个组件可能不同),那么GridBagLayout将是更好的选择

如果代码是由您的教授提供的,那么您需要返回并修复它。

首先,JLabel会更容易,并为您要实现的目标提供更好的支持......

其次,因为JPanel不会覆盖getPreferredSize,所以大多数布局管理器会将组件的大小设置为0x0

答案 1 :(得分:-2)

有一种方法可以在一个JFrame中显示多个JPanel。不幸的是你的方式并不那么容易。 Java有许多不同的LayoutManagers。 为了您的目的,我建议使用GridBagLayout,它更复杂,但绝对是您需要的东西。 这是一个很好的教程,帮助我理解它:

GridBagLayout

希望这是一个帮助。