请解释为什么它不起作用,你也可以发布一个解决方案来解决这个问题。非常感谢你。
public class Run extends JFrame{
/** Fields **/
static JPanel jpanel;
private int x, y;
/** Constructor **/
public Run() {
/** Create & Initialise Things **/
jpanel = new JPanel();
x = 400; y = 400;
/** JPanel Properties **/
jpanel.setBackground(Color.red);
jpanel.setPreferredSize(new Dimension(20, 30));
/** Add things to JFrame and JPanel **/
add(jpanel);
/** JFrame Properties **/
setTitle("Snake Game");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setCursor(null);
setResizable(false);
setSize(new Dimension(x,y));
setLocationRelativeTo(null);
setVisible(true);
}
/** Set the Cursor **/
public void setCursor() {
setCursor (Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
/** Main Method **/
public static void main(String [ ] args) {
Run run = new Run();
run.setCursor();
}
}
答案 0 :(得分:7)
问题是,JFrame
使用BorderLayout
,它会尝试调整内容大小以适合父容器。虽然BorderLayout
会尝试使用首选大小作为提示,但如果可用空间大于或小于,则会自动调整以允许中心内容(默认位置)填充父级的整个可用空间容器
你可以尝试使用FlowLayout
或GridBagLayout
,更有可能在更多情况下尊重首选尺寸
答案 1 :(得分:5)
您可以使用pack()
方法。来自Java Docs:
public void pack():
使此窗口的大小适合其子组件的首选大小和布局....
您应该在构造函数的末尾使用此方法:
...
setLocationRelativeTo(null);
setVisible(true);
pack();
修改强>
如果您希望JFrame保持大小,JPanel也要保持大小。您可以尝试以下方法:
这样的事情:
public Run()
{
/** Create & Initialise Things **/
jpanel = new JPanel();
JPanel jpanel2 = new JPanel();
x = 400;
y = 400;
/** JPanel Properties **/
jpanel2.setBackground(Color.red);
jpanel2.setPreferredSize(new Dimension(50, 50));
jpanel.add(jpanel2);
/** Add things to JFrame and JPanel **/
add(jpanel);
/** JFrame Properties **/
...
}
编辑2:您还可以尝试absolute positioning:
public Run()
{
/** Create & Initialise Things **/
jpanel = new JPanel();
JPanel jpanel2 = new JPanel();
x = 400;
y = 400;
jpanel.setLayout(null);
Insets insets = jpanel2.getInsets();
Dimension size = jpanel2.getPreferredSize();
jpanel2.setBounds(125 + insets.left, 100 + insets.top, size.width, size.height);
/** JPanel Properties **/
jpanel2.setBackground(Color.red);
jpanel.add(jpanel2);
/** Add things to JFrame and JPanel **/
add(jpanel);
/** JFrame Properties **/
...
}
答案 2 :(得分:2)
试试这个:
jpanel.setPreferredSize(new Dimension(20, 30));
jpanel.setMinimumSize(new Dimension(20, 30));
jpanel.setMaximumSize(new Dimension(20, 30));
我不推荐它,但它应该修复大小(只要框架的布局管理器不忽略这些值)。您需要学习如何使用布局管理器。