如何使用Swing创建自定义面板布局? 导入java.awt.BorderLayout; 导入java.awt.Color; 导入java.awt.Dimension; 导入java.awt.FlowLayout; 导入java.awt.GridLayout; 导入java.awt.event.ActionListener; 导入javax.swing.*; 导入javax.swing.border.border; 导入javax.swing.border.LineBorder; 公共级战舰{ 公共静态void main(字符串[]args){ //用于保存按钮的JButton数组 JButton[]userButtons=新JButton[100]; JButton[]compButtons=新JButton[100]; //船舶标签文本 字符串shipsText=“船舶尺寸(方形)”+“承运人5” +“战列舰4”+“驱逐舰3” +“巡逻艇2号”; //绘制主窗口并设置布局 JFrame窗口=新JFrame(“战舰”); 设置窗口大小(12001900); window.getContentPane().setLayout(新的BorderLayout()); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //绘制顶部游戏面板 JPanel gridPanTop=新的JPanel(); setLayout(新的BorderLayout()); gridPanTop.setPreferredSize(新尺寸(1300400)); 网格板。挫折地面(颜色。灰色); //顶部面板文本 JLabel ships=新JLabel(); ships.setText(shipsText); //底部面板按钮 JButton submit=新JButton(“提交”); 维度提交大小=新维度(20,20); submit.setSize(submitSize); //绘制底部游戏面板 JPanel panBottom=新的JPanel(); 盘底。背景(颜色。白色); setLayout(新的BorderLayout()); panBottom.setPreferredSize(新尺寸(200200)); 添加(提交); //设置游戏面板的位置 window.getContentPane().add(gridPanTop,BorderLayout.PAGE_START); window.getContentPane().add(panBottom,BorderLayout.CENTER); //设置网格按钮的边框 边框=新的线条边框(颜色为灰色); //网格的绘制面板 JPanel user=newjpanel(); JPanel comp=新的JPanel(); 用户背景(颜色:灰色); 公司背景(颜色为灰色); 用户订单(边框); 公司订单(边界); //设置网格嵌板的布局 setLayout(新的GridLayout(10,10)); 公司设置布局(新网格布局(10,10)); int x=userButtons.length; //将用户按钮设置为JButtons,设置大小并添加到网格 对于(int i=0;i

如何使用Swing创建自定义面板布局? 导入java.awt.BorderLayout; 导入java.awt.Color; 导入java.awt.Dimension; 导入java.awt.FlowLayout; 导入java.awt.GridLayout; 导入java.awt.event.ActionListener; 导入javax.swing.*; 导入javax.swing.border.border; 导入javax.swing.border.LineBorder; 公共级战舰{ 公共静态void main(字符串[]args){ //用于保存按钮的JButton数组 JButton[]userButtons=新JButton[100]; JButton[]compButtons=新JButton[100]; //船舶标签文本 字符串shipsText=“船舶尺寸(方形)”+“承运人5” +“战列舰4”+“驱逐舰3” +“巡逻艇2号”; //绘制主窗口并设置布局 JFrame窗口=新JFrame(“战舰”); 设置窗口大小(12001900); window.getContentPane().setLayout(新的BorderLayout()); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //绘制顶部游戏面板 JPanel gridPanTop=新的JPanel(); setLayout(新的BorderLayout()); gridPanTop.setPreferredSize(新尺寸(1300400)); 网格板。挫折地面(颜色。灰色); //顶部面板文本 JLabel ships=新JLabel(); ships.setText(shipsText); //底部面板按钮 JButton submit=新JButton(“提交”); 维度提交大小=新维度(20,20); submit.setSize(submitSize); //绘制底部游戏面板 JPanel panBottom=新的JPanel(); 盘底。背景(颜色。白色); setLayout(新的BorderLayout()); panBottom.setPreferredSize(新尺寸(200200)); 添加(提交); //设置游戏面板的位置 window.getContentPane().add(gridPanTop,BorderLayout.PAGE_START); window.getContentPane().add(panBottom,BorderLayout.CENTER); //设置网格按钮的边框 边框=新的线条边框(颜色为灰色); //网格的绘制面板 JPanel user=newjpanel(); JPanel comp=新的JPanel(); 用户背景(颜色:灰色); 公司背景(颜色为灰色); 用户订单(边框); 公司订单(边界); //设置网格嵌板的布局 setLayout(新的GridLayout(10,10)); 公司设置布局(新网格布局(10,10)); int x=userButtons.length; //将用户按钮设置为JButtons,设置大小并添加到网格 对于(int i=0;i,java,swing,layout-manager,Java,Swing,Layout Manager,我有一个任务,在JavaSwing中创建下面的面板布局时遇到了很多麻烦。我没有运气使用任何布局 有人能帮我做这个布局吗 目前,代码显示以下输出: 你可能知道我是一个初学者,所以请原谅新手的错误。目前我所拥有的面板布局看起来像我所附的理想布局,但显然不是我所希望的正确布局。您可以通过不同的布局和布局组合(使用子面板)实现这一点。我会使用,这绝对是最通用的布局之一 示例代码 import java.awt.BorderLayout; import java.awt.Color; import j

我有一个任务,在JavaSwing中创建下面的面板布局时遇到了很多麻烦。我没有运气使用任何布局

有人能帮我做这个布局吗

目前,代码显示以下输出:


你可能知道我是一个初学者,所以请原谅新手的错误。目前我所拥有的面板布局看起来像我所附的理想布局,但显然不是我所希望的正确布局。

您可以通过不同的布局和布局组合(使用子面板)实现这一点。我会使用,这绝对是最通用的布局之一

示例代码

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class BattleShipsMain {
    public static void main(String[] args) {

        // JButton arrays to hold buttons
        JButton[] userButtons = new JButton[100];
        JButton[] compButtons = new JButton[100];

        // Text for ships label
        String shipsText = "Ships      Size (Squares)" + "Carrier          5"
                + "Battleship       4" + "Destroyer        3"
                + "Patrol Boat      2";

        // Draw main window and set layout
        JFrame window = new JFrame("Battle Ships");
        window.setSize(1200, 1900);
        window.getContentPane().setLayout(new BorderLayout());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Draw top game panel
        JPanel gridPanTop = new JPanel();
        gridPanTop.setLayout(new BorderLayout());
        gridPanTop.setPreferredSize(new Dimension(1300, 400));
        gridPanTop.setBackground(Color.GRAY);

        // Top panel text
        JLabel ships = new JLabel();
        ships.setText(shipsText);

        // Bottom panel buttons
        JButton submit = new JButton("Submit");
        Dimension submitSize = new Dimension(20, 20);
        submit.setSize(submitSize);

        // Draw bottom game panel
        JPanel panBottom = new JPanel();
        panBottom.setBackground(Color.WHITE);
        panBottom.setLayout(new BorderLayout());
        panBottom.setPreferredSize(new Dimension(200, 200));
        panBottom.add(submit);

        // Set position of game panels
        window.getContentPane().add(gridPanTop, BorderLayout.PAGE_START);
        window.getContentPane().add(panBottom, BorderLayout.CENTER);

        // Set border for grid buttons
        Border border = new LineBorder(Color.gray);

        // Draw panel for grids
        JPanel user = new JPanel();
        JPanel comp = new JPanel();
        user.setBackground(Color.gray);
        comp.setBackground(Color.gray);
        user.setBorder(border);
        comp.setBorder(border);

        // Set layout for grid panels
        user.setLayout(new GridLayout(10, 10));
        comp.setLayout(new GridLayout(10, 10));

        int x = userButtons.length;

        // Set user buttons as JButtons, set size and add to grid
        for (int i = 0; i < x; i++) {
            userButtons[i] = new JButton();
            userButtons[i].setPreferredSize(new Dimension(40, 40));
            user.add(userButtons[i]);
        }

        // Set computer buttons as JButtons, set size and add to grid
        for (int i = 0; i < x; i++) {
            compButtons[i] = new JButton();
            compButtons[i].setPreferredSize(new Dimension(40, 40));
            comp.add(compButtons[i]);
        }

        // Add panels to main frame and set visible
        window.pack();
        window.add(gridPanTop);
        window.add(panBottom);
        gridPanTop.add(user, BorderLayout.WEST);
        gridPanTop.add(comp, BorderLayout.EAST);
        gridPanTop.setVisible(true);
        panBottom.setVisible(true);
        window.setVisible(true);
        user.setVisible(true);
        comp.setVisible(true);

        // Start main game
        MainGame start = new MainGame();

    }
}
生成的输出

GridBagLayout的关键部分是


在示例中,请参见如何将第一行的
rowWeigth
设置为
0.6
,将第二行的
0.4
设置为
。根据需要调整它们(如果您喜欢相同的空间,只需将
0.5
设置为两者)。

您可以通过不同的布局和布局组合(使用子面板)实现这一点。我会使用,这绝对是最通用的布局之一

示例代码

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class BattleShipsMain {
    public static void main(String[] args) {

        // JButton arrays to hold buttons
        JButton[] userButtons = new JButton[100];
        JButton[] compButtons = new JButton[100];

        // Text for ships label
        String shipsText = "Ships      Size (Squares)" + "Carrier          5"
                + "Battleship       4" + "Destroyer        3"
                + "Patrol Boat      2";

        // Draw main window and set layout
        JFrame window = new JFrame("Battle Ships");
        window.setSize(1200, 1900);
        window.getContentPane().setLayout(new BorderLayout());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Draw top game panel
        JPanel gridPanTop = new JPanel();
        gridPanTop.setLayout(new BorderLayout());
        gridPanTop.setPreferredSize(new Dimension(1300, 400));
        gridPanTop.setBackground(Color.GRAY);

        // Top panel text
        JLabel ships = new JLabel();
        ships.setText(shipsText);

        // Bottom panel buttons
        JButton submit = new JButton("Submit");
        Dimension submitSize = new Dimension(20, 20);
        submit.setSize(submitSize);

        // Draw bottom game panel
        JPanel panBottom = new JPanel();
        panBottom.setBackground(Color.WHITE);
        panBottom.setLayout(new BorderLayout());
        panBottom.setPreferredSize(new Dimension(200, 200));
        panBottom.add(submit);

        // Set position of game panels
        window.getContentPane().add(gridPanTop, BorderLayout.PAGE_START);
        window.getContentPane().add(panBottom, BorderLayout.CENTER);

        // Set border for grid buttons
        Border border = new LineBorder(Color.gray);

        // Draw panel for grids
        JPanel user = new JPanel();
        JPanel comp = new JPanel();
        user.setBackground(Color.gray);
        comp.setBackground(Color.gray);
        user.setBorder(border);
        comp.setBorder(border);

        // Set layout for grid panels
        user.setLayout(new GridLayout(10, 10));
        comp.setLayout(new GridLayout(10, 10));

        int x = userButtons.length;

        // Set user buttons as JButtons, set size and add to grid
        for (int i = 0; i < x; i++) {
            userButtons[i] = new JButton();
            userButtons[i].setPreferredSize(new Dimension(40, 40));
            user.add(userButtons[i]);
        }

        // Set computer buttons as JButtons, set size and add to grid
        for (int i = 0; i < x; i++) {
            compButtons[i] = new JButton();
            compButtons[i].setPreferredSize(new Dimension(40, 40));
            comp.add(compButtons[i]);
        }

        // Add panels to main frame and set visible
        window.pack();
        window.add(gridPanTop);
        window.add(panBottom);
        gridPanTop.add(user, BorderLayout.WEST);
        gridPanTop.add(comp, BorderLayout.EAST);
        gridPanTop.setVisible(true);
        panBottom.setVisible(true);
        window.setVisible(true);
        user.setVisible(true);
        comp.setVisible(true);

        // Start main game
        MainGame start = new MainGame();

    }
}
生成的输出

GridBagLayout的关键部分是


在示例中,请参见如何将第一行的
rowWeigth
设置为
0.6
,将第二行的
0.4
设置为
。根据您的喜好调整它们(如果您喜欢相同的空间,只需将
0.5
设置为两者)。

看起来像是一个空的
页面。\u START
。请编辑您的问题,包括一个显示您当前方法的问题。我基本上同意@trashgood,边框布局似乎是最好的解决方案,但这取决于如果用户将GUI增大,如何分配额外的空间。谢谢大家,我将在一个空的
页面上发布我很快尝试显示的更新。请编辑您的问题,包括一个显示您当前方法的页面。我基本上同意@trashgood,border layout似乎是最好的解决方案,但这取决于如果用户将GUI变大,如何分配额外的空间。谢谢大家,我将发布我很快尝试显示的更新
new GridBagConstraints(columnNumber, rowNumber, columnSpan, rowSpan, columnWeigth, rowWeigth, alignment, fillType, insets, padX, pady)