java - 在 Swing 中使用 GridLayout 时设置框架大小

标签 java swing jframe layout-manager gridbaglayout

在下面的代码中,我使用 gridbaglayout 将所有按钮在 600 X 400 的帧大小上显示在两行中。在下面的代码中注释掉 setSize() 或 pack() 没有帮助。我的问题是如何获得尺寸为 600 X 400 的框架,并且框架底部有一个带有字母按钮的面板。感谢您的帮助。

import javax.swing.*;

import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.event.*;

public class HangmanGUI {


        public static void main(String[] args){

            new HangmanGUI();

        }
        //constructor for Hangman
        /**
         * Instantiates a new hangman gui.
         */
        public HangmanGUI() {

            JFrame myframe= new JFrame();
            JPanel myPanel = new JPanel();
            myPanel.setLayout(new GridLayout());
            GridBagConstraints gbc = new GridBagConstraints();


            myframe.setSize(600,400);
            int x =0; int y=5;

            for (char alphabet = 'A';alphabet<='Z';alphabet++){

                gbc.gridx=x;
                gbc.gridy=y;
                myPanel.add(new JButton(alphabet+""),gbc);
                x++;
                if (x>15){
                    y =6;x=0;
                }
            }

            myframe.add(myPanel);
            myframe.pack();
            myframe.setTitle("Hangman Game");
            myframe.setVisible(true);
            myframe.setLocationRelativeTo(null);

            myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }

}

最佳答案

打包后,框架大小是根据其内容 Pane 的首选大小计算的。

就我个人而言,我不太关心窗口大小和程序的功能,而是让底层框架来解决一切......但是,如果这对你很重要......

JPanel之类的东西开始,并覆盖它的getPreferredSize方法...

public class BigPane extends JPanel {
    public Dimension getPreferredSize() {
        return new Dimension(600, 400);
    }
}

将此面板设置为框架的内容面板...

JFrame myframe= new JFrame();
myFrame.setContentPane(new BigPane());
// This is important as the panels default layout is FlowLayout...
myFrame.setLayout(new BorderLayout());

如果您希望按钮 Pane 位于南部位置,那么您只需为布局提供正确的布局约束,在本例中为 BorderLayout...

myFrame.add(myPanel, BorderLayout.SOUTH);

这将允许您将“主要”组件添加到CENTER位置。

正如已经建议的那样,最好使用 GridLayout 作为按钮,但这取决于您想要实现的目标。

看看Laying out components within a container了解更多详情

关于java - 在 Swing 中使用 GridLayout 时设置框架大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390534/

相关文章:

java - Eclipse Neon Local Websphere 未启动

java - 电话间隙 : calling a java function from Javascript

java - 如何在能够暂停/恢复的同时以固定间隔从线程获取字符串值?

Java,扩展类或实例化时出现 StackOverflowError

java - 为什么我不能dispose()?

java - Android 不使用 listFiles() 方法列出目录中的所有文件

java - 在 Java 项目中使用 android.jar - RuntimeException Stub?

java - JTable 中更快的搜索算法

java - 如何动态更改 JFrame 大小

java - 如何在java swing中的jframe中添加图像?