在下面的代码中,我使用 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
作为按钮,但这取决于您想要实现的目标。
关于java - 在 Swing 中使用 GridLayout 时设置框架大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390534/