【问题标题】:White space at the right and bottom edge of the window窗口右侧和底部边缘的空白区域
【发布时间】:2015-02-09 13:21:24
【问题描述】:

在我创建了一个应该是全黑的窗口后,右边缘和下边缘有白色。我可能做错了什么?

这是我初始化窗口的构造函数:-

    public Panel()
    {
        Thread t = new Thread(this);
        addKeyListener(this);
        setFocusable(true);
        this.setPreferredSize(new Dimension(gameWidth, gameHeight));
        JFrame f = new JFrame("AlienBusters");
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        t.start();
    }

这是我使窗口变黑的绘制方法:-

    @Override
    public void paintComponent(Graphics g)  
    {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, gameWidth, gameHeight);
    }

【问题讨论】:

  • 不要将您的班级称为“小组”。有一个具有该类名称的 AWT 组件,它令人困惑。您的班级名称应该更具描述性。

标签: java swing awt paintcomponent


【解决方案1】:

五件事……

  1. pack之后调用setResizable,不是个好主意,setResizable可以改变框架边框大小,影响可用内容大小...
  2. 使用KeyListener,认真地看How to Use Key Bindings,免得头疼……
  3. 依靠幻数而不是帝国值,g.fillRect(0, 0, gameWidth, gameHeight); 应该是g.fillRect(0, 0, getWidth(), getHeight()); 或更好,只需使用setBackground(Color.BLACK) 并通过super.paintComponent免费获得它...而paintComponent 应该是protected; )
  4. 致电setPreferredSize。这意味着可以更改大小,这可能不是您真正想要的。相反,请改写 getPreferredSize。详情请见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?
  5. 在组件的构造函数中构造一个框架,组件不应该关心它将如何显示,它应该只关注它的工作。

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 2017-05-04
    • 2021-05-10
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多