我正在使用 Java 开发贪吃蛇游戏。棋盘(所有动作发生的地方)的宽度和高度应该是固定的(640 像素 * 480 像素)。
结构:
-
主班延伸自JFrame class,
-
Board延伸自的类JPanel class;
In Main类我有类似的东西...
setSize( 1024, 768 );
...在董事会课上我有...
setSize( BOARDS_WIDTH, BOARDS_HEIGHT );
问题是主窗口和唯一窗口似乎是 1024 * 768,但其中的面板 - 不像 640 * 480。我有设置背景()以及背景填充超过 640 * 480。
有什么方法可以使 Board 的宽度和高度像 640 * 480 一样,但主窗口的宽度和高度 - 与 Board 的宽度和高度一样正确?
现在看起来是这样的......
Edit:
所有的工作......几乎。
Main class:
add( new Board(), BorderLayout.CENTER );
pack();
setResizable( false );
setLocationRelativeTo( null );
setVisible( true );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setTitle( "Snake (by daGrevis)" );
Board class:
setPreferredSize( new Dimension( 640, 480 ) );
灰色背景是642*482!就像会有一个边框将所有内容包围 1 个像素!
拜托,出了点事 xxx*x,这根本不是真的,检查一下
JButton Size - java.awt.Dimension[width=400,height=40]
JPanel Size - java.awt.Dimension[width=640,height=480]
JFrame Size - java.awt.Dimension[width=646,height=505]
代码(基本内容来自跟踪:使用 JFC/Swing 创建 GUI http://download.oracle.com/javase/tutorial/uiswing/index.html,但我仍然认为这已经过时了)
编辑:忘记setDefaultCloseOperation()
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FrameSize {
private JFrame frm = new JFrame();
private JPanel pnl = new JPanel();
private JButton btn = new JButton("Get ScreenSize for JComponents");
public FrameSize() {
btn.setPreferredSize(new Dimension(400, 40));
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("JButton Size - " + btn.getSize());
System.out.println("JPanel Size - " + pnl.getSize());
System.out.println("JFrame Size - " + frm.getSize());
}
});
pnl.setPreferredSize(new Dimension(640, 480));
pnl.add(btn, BorderLayout.SOUTH);
frm.add(pnl, BorderLayout.CENTER);
frm.setLocation(150, 100);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // EDIT
frm.setResizable(false);
frm.pack();
frm.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
FrameSize fS = new FrameSize();
}
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)