我正在制作一个得分保持计划,但我遇到了一个问题.我试图做的是在顶部有一个包含两个JPanel的JPanel,而JPanel又包含两个团队名称.我很困惑为什么程序顶部的两个JLabel没有集中在它们所包含的JPanels中.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ScoreFrame extends JFrame {
private static final Dimension SCREEN_SIZE = Toolkit.getDefaultToolkit().getScreenSize();
private static final int WIDTH = SCREEN_SIZE.width;
private static final int HEIGHT = SCREEN_SIZE.height;
private final JTextField[] nameField = new JTextField[] { new JTextField(), new JTextField() };
private final JLabel[] nameLabel = new JLabel[] { new JLabel("Team 1"), new JLabel("Team 2") };
private final GridBagLayout gridBag = new GridBagLayout();
private final GridBagConstraints constraints = new GridBagConstraints();
private final JPanel topPanel …Run Code Online (Sandbox Code Playgroud) 我编写了这段代码示例来说明我在程序中遇到的问题.
我希望能够将JSplitPane的滑块向左滑动,超出按钮的边缘,压缩该JPanel,并让FlowLayout将按钮包裹到第二行.
相反,JSplitPane不允许我将滑块移动到屏幕上最右边的按钮,如果我调整整个JFrame的大小以强制压缩,按钮(我推测)只是在JPanel的右侧运行,下面是滑杆(我猜,因为我显然看不到它们).
我究竟做错了什么?
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
public class Driver implements Runnable {
public static void main(String[] args) {
(new Driver()).run();
}
public void run() {
try {
go();
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
private void go() throws Exception {
JFrame jframe = new JFrame("FlowLayoutTest");
JPanel left = new JPanel();
left.setBackground(Color.RED);
left.setLayout(new BorderLayout());
JPanel right = new JPanel();
right.setBackground(Color.BLUE);
right.setLayout(new BorderLayout());
JSplitPane topmost =
new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
jframe.setContentPane(topmost);
JPanel bottomleft …Run Code Online (Sandbox Code Playgroud) 感谢您抽出宝贵时间阅读本文.我希望它不会混淆,如果需要任何其他信息,请告诉我!
问题:我正在制作类似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()不会影响结果.