Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JFrame中显示JPanel网格? 我对java很陌生,但有C++的一些经验。这是一个家庭作业,所以我真的只是想找个人给我指出正确的方向_Java_Swing_Layout Manager - Fatal编程技术网

在JFrame中显示JPanel网格? 我对java很陌生,但有C++的一些经验。这是一个家庭作业,所以我真的只是想找个人给我指出正确的方向

在JFrame中显示JPanel网格? 我对java很陌生,但有C++的一些经验。这是一个家庭作业,所以我真的只是想找个人给我指出正确的方向,java,swing,layout-manager,Java,Swing,Layout Manager,分配需要一个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 ImageI

分配需要一个
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()
功能吗?还是只创建多个面板并指定每个面板在框架中的位置


如果有人能给我指出正确的方向,那就太棒了

有一种方法可以在一个JFrame中显示多个JPanel。不幸的是,你的路并不那么容易。Java有许多不同的布局管理器。 出于您的目的,我推荐GridBagLayout,它更复杂,但绝对是您需要的东西。 下面是一个很好的教程,它帮助我理解了它:


希望对您有所帮助。

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

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

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

首先,一个
JLabel
将更容易,并为您试图实现的目标提供更好的支持


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

“我应该使用gridLayout()功能吗?”如果您指的是
gridLayout
,则是。就我个人而言,我会在
JLabel
中显示图像(可能会添加到面板中)。感谢Andrew的更正,这是我的第一个Java程序,所以我目前非常无知。我会看看你的建议!谢谢你的回复!我一定去看看。我想指出的是,教授并没有明确表示我们必须使用多个JPanel,他只是为我们提供了上述代码和每张卡的.gif,因此如果有更简单的方法,请让我知道,但我将开始学习GridBagLayout教程。“出于您的目的,我建议使用GridBagLayout…”在这种情况下,为什么使用GBL而不是
GridLayout
?如果所有单元格都需要相同的大小,因此
GridLayout
。因为JPanel(据推测是由教授提供的)不会覆盖getPreferredSize,GridBagLayout将是一个错误的选择,因为它想用它来决定如何布局其组件,默认设置所有面板的0x0…好的,你是对的,我只是想再进一步。为什么只是在没有任何信息的情况下展示卡片。。。所以Gridlayout也可以工作