Java JFrame的大小不正确

Java JFrame的大小不正确,java,swing,jframe,Java,Swing,Jframe,我正在用Java创建一个乒乓球游戏。我最初有一个未装饰的JFrame,宽度为700,高度为400。后来我改变了主意,换上了装饰过的相框。错误在于,对于装饰框中的顶部30px左右,球离开屏幕的。我测量了屏幕,当装饰时,它确实是700 x 400;但是,我需要的区域,在那里球将被涂成700 x 400,而不是整个JFrame。我能做什么 如何设置框架的大小: this.setSize(new Dimension(WIDTH, HEIGHT)); 我很高兴根据要求发布解决此问题所需的所有代码 编辑

我正在用Java创建一个乒乓球游戏。我最初有一个未装饰的JFrame,宽度为700,高度为400。后来我改变了主意,换上了装饰过的相框。错误在于,对于装饰框中的顶部30px左右,球离开屏幕的。我测量了屏幕,当装饰时,它确实是700 x 400;但是,我需要的区域,在那里球将被涂成700 x 400,而不是整个JFrame。我能做什么

如何设置框架的大小:

this.setSize(new Dimension(WIDTH, HEIGHT));
我很高兴根据要求发布解决此问题所需的所有代码

编辑

我能做什么


在添加到框架的面板中进行自定义绘制。这样,坐标将如您所期望的那样。使用此方法的另一个好主意是覆盖
getPreferredSize()
以返回可视播放区域的大小,然后
pack()
框架以获得内容的完美大小。

您能否发布我将如何执行此操作的代码?“您能否发布代码…”因此,它不是代码生成服务。为什么不试着去实现它,然后告诉我们你的最佳尝试呢?话虽如此,这里有一个我一直在撒谎的例子……当我建议你发布一个MCVE时,我指的是一个MCVE,而不是不可编译的代码片段。我链接到了关于MCVE的文章,以及以MCVE形式链接的代码示例。阅读这篇文章,理解它告诉你的,然后发布一个MCVE。“等等,我仍然有一个问题。”这是因为你仍然在“用魔法编码”。这就是我所说的复制/粘贴代码片段,希望它们能神奇地工作。有必要了解粘贴的代码发生了什么。这需要检查Java文档中的方法,并进行其他测试和研究。这次的问题是鼠标侦听器被添加到框架中,而不是自定义绘制的组件。如果您尝试在
JComponent
中的特定坐标处绘制某个对象,那么很明显,它是相对于面板的。
gamePanel.setPreferredSize(新java.awt.Dimension(700400))
请参见(是)。我建议重写该方法,因为这是正确的方法。
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class Tester extends JFrame {

    public Tester() {
        this.add(new Window());
        pack();

        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });
    }

    private void formMouseClicked(java.awt.event.MouseEvent evt) {                                  
        System.out.println("X: " + evt.getX() + ", Y: " + evt.getY());
    }  

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Tester().setVisible(true);
            }
        });
    }

    public class Window extends JComponent {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 300);
        }
    }
}