Java swing布局,3个面板

Java swing布局,3个面板,java,swing,Java,Swing,所以我想在业余时间制作我的第一个java小游戏。我的布局有问题 我希望游戏是一个特定的大小(600高,800宽),我想在主框架内3“面板”。一个是主游戏框架,高度为500,宽度为600,右侧是库存/信息面板,高度为500,宽度为200,最后是底部的文本面板,用于保存高度为100,宽度为800的信息。到目前为止,这是我所拥有的。(我没有调整面板的高度,因为我发现没有任何变化) 我将如何着手制作一个框架,其中有3个面板。我看了一下如何使用GridBagLayout(),但似乎我把它弄得更糟了,而且不

所以我想在业余时间制作我的第一个java小游戏。我的布局有问题

我希望游戏是一个特定的大小(600高,800宽),我想在主框架内3“面板”。一个是主游戏框架,高度为500,宽度为600,右侧是库存/信息面板,高度为500,宽度为200,最后是底部的文本面板,用于保存高度为100,宽度为800的信息。到目前为止,这是我所拥有的。(我没有调整面板的高度,因为我发现没有任何变化)

我将如何着手制作一个框架,其中有3个面板。我看了一下如何使用GridBagLayout(),但似乎我把它弄得更糟了,而且不完全理解如何使用它,即使有文档(是的,我很笨)

如果你不理解我的部分代码或我的帖子,请点击LMK。多谢各位

package Frame;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class frame {

//Sets variables such as height, width and title
private JFrame frame;
private Canvas canvas;
private JPanel mainWindow, infoWindow, textWindow;

//main constructor to create the frame of the game. Is called in Launcher
//Sets the parameters of the frame. User defined in main. 
public frame(){
    createDisplay();
}
//sets the properties of the display
private void createDisplay() {
    frame = new JFrame();
    frame.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    frame.setTitle("Island Man");
    frame.setSize(800, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setVisible(true);

    canvas = new Canvas();
    canvas.setSize(new Dimension(800, 600));
    canvas.setMaximumSize(new Dimension(800, 600));
    canvas.setMinimumSize(new Dimension(800, 600));

    mainWindow = new JPanel();
    mainWindow.setBackground(Color.CYAN);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 0;
    c.weightx = 2;
    c.weighty = 2;
    frame.add(mainWindow, c);

    infoWindow = new JPanel();
    infoWindow.setBackground(Color.GREEN);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 3;
    c.gridy = 0;
    c.weightx = 0;
    c.weighty = 2;
    frame.add(infoWindow, c);

    textWindow = new JPanel();
    textWindow.setBackground(Color.MAGENTA);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 3;
    c.gridy = 0;
    c.weightx = 0;
    c.weighty = 3;
    frame.add(textWindow, c);

    frame.add(canvas);
    frame.pack();
}
}

一种方法是使用边框布局,主面板在中间,库存面板在东部,文本面板在南部。确保设置每个面板的首选尺寸

一种方法是使用边框布局,主面板在中间,库存面板在东部,文本面板在南部。确保设置每个面板的首选尺寸


我如何制作一个具有这3个尺寸面板的框架

有太多的方法可以做到这一点。I最直接的方法是为每个面板设置相应的尺寸,并将其添加到主面板,然后将主面板添加到框架:

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            JFrame frame = new JFrame("Game");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new MainPanel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);             
        }
    }); 
}
要使用的确切布局取决于

  • 您希望如何安排您的子面板,以及
  • 当调整帧的大小并进行调整时,您希望它们如何反应
  • 您希望如何排列面板中的构件
下面显示了使用流程布局的一种可能方法

将主面板添加到框架:

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            JFrame frame = new JFrame("Game");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new MainPanel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);             
        }
    }); 
}

我如何制作一个具有这3个尺寸面板的框架

有太多的方法可以做到这一点。I最直接的方法是为每个面板设置相应的尺寸,并将其添加到主面板,然后将主面板添加到框架:

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            JFrame frame = new JFrame("Game");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new MainPanel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);             
        }
    }); 
}
要使用的确切布局取决于

  • 您希望如何安排您的子面板,以及
  • 当调整帧的大小并进行调整时,您希望它们如何反应
  • 您希望如何排列面板中的构件
下面显示了使用流程布局的一种可能方法

将主面板添加到框架:

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            JFrame frame = new JFrame("Game");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new MainPanel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);             
        }
    }); 
}


你的问题是什么?我如何制作一个具有这三个尺寸面板的框架?我看了一下,发现GridBagLayout()很好用,但我遇到了一些问题。正如FredK提到的,使用setPreferredSize。不要在面板上调用setSize;布局管理器负责尺寸,并将删除您的设置。您是否刚刚更改了对每个面板尺寸的要求?您的问题是什么?如何制作具有这3个面板尺寸的框架?我看了一下,发现GridBagLayout()很好用,但我遇到了一些问题。正如FredK提到的,使用setPreferredSize。不要在面板上调用setSize;布局管理器负责管理大小,并清除您的设置。您是否改变了您对每个面板尺寸的要求?所以我试过了,但是在中间我得到了一个巨大的灰色空间,而且尺寸不正确。谢谢,这对我来说是最容易的。所以我试过了,但是在中间我得到了一个巨大的灰色空间,而且尺寸不正确。谢谢,这对我来说是最简单的。加上一个,但更好的是BoxLaoyut,因为FlowLayout荣誉getPreferredSize和no不能与容器一起调整大小,请注意我如何将最后一个青色框放在橙色和黄色框下?@AmirAC青色面板不在任何面板下。它们只是并排躺着。它位于右侧,因为我最后添加了它。加上一个,但更好的是BoxLaoyut,因为FlowLayout荣誉getPreferredSize和no不能与容器一起调整大小,请注意,我如何将最后一个青色框放在橙色和黄色框下?@AmirAC青色面板不在任何面板下。它们只是并排躺着。它在右边,因为我最后加的。