Twi*_*002 1 java swing jpanel jframe sizing
感谢您抽出宝贵时间阅读本文.我希望它不会混淆,如果需要任何其他信息,请告诉我!
问题:我正在制作类似Snake的游戏,我创建了一个JFrame,然后添加了JPanel.好吧,如果我没有在JFrame中设置它的大小,它的大小将大约为100 x 20.当我设置它的大小时,它将保持在设置的维度.但是,如果我打包()它,当我在JPanel中定义了大小时,它将缩小回100 x 20左右.我也设定了界限,没有运气.我使用FlowLayout()和BorderLayout()也没有成功.现在我的游戏运行正常并且没有任何问题,除了框架.它会切断两侧,除非我做一些我不想做的体操.
目标:我希望能够将Frame尺寸正确地指定到我指定的宽度和高度,并让面板向下移动一点,为游戏添加文本空间,这样就不会阻挡任何东西.
基本上我很困惑和慌张,我已经花了几天时间,到目前为止我还没有成功.
JFrame类:
public class main extends JFrame {
/**
* @param args the command line arguments
*/
public main(){
Board game = new Board();
setLayout(new BorderLayout(0, 50));
setSize(game.getGameWidth(), game.getGameHeight());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setTitle("BlockRunner");
getContentPane().add(game);
setResizable(false);
setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我的董事会课程:
public class Board extends JPanel implements ActionListener, KeyListener{
private int width = 600;
private int height = 400;
Board(){
addKeyListener(this);
setFocusable(true);
setBackground(Color.LIGHT_GRAY);
setSize(width, height);
InitGame();
}
}
Run Code Online (Sandbox Code Playgroud)
我愿意尝试任何有人愿意为我提供的东西.感谢您的时间!
编辑1 :(由于用户的答案.)使用setPerferredSize(),setMinmumSize()和setMaximumSize()不会影响结果.
您需要使用getPreferred/Minimum/MaximumSize实际上尊重它的组合和布局.
在这里,我使用了一个GridBagLayout设置,以便电路板将始终保持相同的大小,但单元格将使用相同的最大量.
如果要将文本保留在电路板底部(而不是框架),请删除weighty约束(可能还有weightx)


public class TestBoardGame {
public static void main(String[] args) {
new TestBoardGame();
}
public TestBoardGame() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 1;
frame.add(new BoardGamePane(), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.fill= GridBagConstraints.HORIZONTAL;
JLabel text = new JLabel("Area for text");
text.setHorizontalAlignment(JLabel.CENTER);
frame.add(text, gbc);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class BoardGamePane extends JPanel {
public BoardGamePane() {
setBorder(new LineBorder(Color.RED));
setBackground(Color.ORANGE);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
@Override
public Dimension getMinimumSize() {
return getPreferredSize();
}
@Override
public Dimension getMaximumSize() {
return getPreferredSize();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5552 次 |
| 最近记录: |