【发布时间】:2012-02-18 22:36:38
【问题描述】:
我有一个 500 x 500 像素的图像,我试图将它绘制到一个 JFrame 内的 JPanel 上。这是我到目前为止的代码:
public class Game extends JFrame {
// Other code...
setTitle("Game");
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(500, 500));
add(panel);
setSize(500, 500);
setIgnoreRepaint(true);
// Handle a close event gracefully.
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
addKeyListener(new MainMenuState(this));
setResizable(false);
pack();
setVisible(true);
我可以在 JPanel 上绘图,但 JPanel 的左上角似乎在标题栏下方的 JFrame 上的 0,0 处绘制。我尝试在 JFrame 上设置布局管理器,但这似乎不起作用。我可以手动抵消 JPanel,但我不认为我必须这样做(我认为 pack() 应该拿车)。
【问题讨论】:
-
您能否详细说明您的问题?
-
我担心您的问题可能是您将 MouseListener/MouseMotionListener 添加到 JFrame 而不是绘图组件,或者您直接在 JFrame 中绘图。如果是这样,则将相对于 JFrame 绘制点。请显示更多代码,以便澄清。
-
其他可能性是,如果您将 JPanel
getX()和getY()方法默认为 0,因为这些方法会阻止布局管理器正确放置组件。或者您可能正在尝试以其他方式设置组件位置——目前很难说。底线是:要正确回答您的问题,我们需要了解更多信息。 -
我猜我的cmets一定又是用隐形墨水写的……
-
我添加了我之前删除的一行:
addKeyListener(new MainMenuState(this));前段时间我在这里问了一个关于向游戏添加上下文的问题,因此它的行为会根据其当前状态而有所不同。有人建议了状态设计模式,所以我尝试实现它。 MainMenuState() 具有主菜单的所有适当绘图和输入处理代码。
标签: java swing user-interface