Java Swing 制作具有自定义尺寸的盒子

标签 java swing jpanel grid-layout boxlayout

我需要帮助在 Java Swing 中进行布局。我的盒子变得非常小,不知道如何让它们变大。

如下所示:/image/acRjl.png

enter image description here

这就是我想要的:/image/yoja3.png

enter image description here

代码:

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

public class MPC
{
    public static void main(String [] args)
    {
            createWindow();
    }

    public static void createWindow()
    {
            JPanel main, left, right;
            JFrame frame = new JFrame("MPC");
            Box [] box = new Box[16];
            JSlider tempo = new JSlider(JSlider.VERTICAL, 0, 30, 15);

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            main = new JPanel();
            main.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

            //Left side holds boxes
            left = new JPanel();
            left.setLayout(new GridLayout(4, 4));

            for(int i = 0; i < 16; i++)
            {
                    box[i] = new Box(BoxLayout.X_AXIS);
                    box[i].setBorder(BorderFactory.createLineBorder(Color.black));
                    box[i].add(new JLabel("      " + (i+1) + "      "));
                    left.add(box[i]);
            }

            //Right side for tempo
            right = new JPanel();
            right.setLayout(new GridLayout(1, 1));
            tempo.setMajorTickSpacing(10);
            tempo.setMinorTickSpacing(1);
            tempo.setPaintTicks(true);
            right.add(tempo);

            //Add everything to window
            main.add(left, BorderLayout.WEST);
            main.add(right, BorderLayout.EAST);

            frame.add(main);
            frame.getContentPane();

            //Window Stuff
            frame.setBounds(50,50,500,500);
            frame.setResizable(false);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
    }
}

我该怎么做才能使它看起来像第二张图片?任何帮助将不胜感激!

最佳答案

尝试将 main 的布局更改为 BorderLayout:

main = new JPanel(new BorderLayout());

然后,将 left 面板添加到 BorderLayout 的中心

main.add(left, BorderLayout.CENTER);

这样,盒子网格将尽可能多地占据 main 的可用空间。请参阅How to Use BorderLayout更多细节。

这些更改的结果:

enter image description here

关于Java Swing 制作具有自定义尺寸的盒子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24213048/

相关文章:

java - 我怎么知道我是否在事件派发线程上?

java - 如何在 Java 中的 GlazedLists/JTable 中使列、行或单元格可编辑?

java - 如何让Jetty打印日志

java - 在 JEditorPane 中打开 Web 链接时出错

java - 将 int 数组(图像数据)写入文件的最佳方法是什么

java - Java 中 JPanel 中的自动定位组件

java - JPanel 可调整大小,组件位于中心

java - 使用 JPanel 初始化 JFrame 的正确方法

java - 在单元测试期间加载 WAR 资源

java - Android 列出可以查看未知文件的应用程序