【问题标题】:Java fillOval will not fill windowJava fillOval 不会填充窗口
【发布时间】:2013-04-03 22:22:21
【问题描述】:

** 请随时提供有关流程的反馈。可能有更好的方法来完成我正在做的事情,我只是不知道。

我有一个扩展 JPanel 的 Game 类。在paintComponent() 方法中,它根据游戏(菜单)的状态呈现不同的类。只有欢迎屏幕会显示整个窗口。即使我在 640x480 窗口上手动分配 (0, 0, 1000, 1000) 的坐标,其他的也不会填满窗口。

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    if (state == State.WELCOME) {

        welcome.render(g);

    } else if (state == State.SELECTPOSITION) {

        selectPosition.render(g);

    } else if (state == State.SELECTSCENARIO) {

        selectScenario.render(g);
...

selectScenario() 行下列出了更多具有相同逻辑的状态。

前2个的render()方法如下:

welcome.render(g)

public void render(Graphics g) {
    g.setColor(Color.red);
    g.fillRect(0, 0, 640, 480);
    g.setColor(Color.white);
    g.drawString("Welcome", 50, 150);
}


selectPosition.render(g)

public void render(Graphics g) {
    g.setColor(Color.blue);
    g.fillRect(0, 0, 1000, 1000);
}

在 SelectPosition 屏幕期间,屏幕底部有一条大约 50px 高的红线。

如果您需要更多信息,请告诉我。我试图只分享相关的台词。

非常感谢任何帮助。

【问题讨论】:

  • 为什么不使用setBackground(Color c);
  • 感谢您的快速回复。当前的颜色只是为了帮助我确定窗口是否按预期变化。我更新了 JPanel 逻辑以使用 setBackground(Color.[color])。窗口底部的彩色条仍然存在同样的问题。
  • 我不知道是什么问题。 paintComponent(Graphics g) 方法中还有其他内容吗?也许你需要使用这个:initial threads。 (我真的不知道怎么用)
  • paintComponent 方法中没有其他内容。我的 Game 类扩展了 JPanel 并实现了 Runnable。 run 方法每秒计算帧数并调用更新方法 30 次。更新方法正在调用重绘。

标签: java swing jpanel render


【解决方案1】:

我们不熟悉您的大部分代码、逻辑和程序结构,您不妨创建并发布sscce,让我们亲身体验您的实际体验。但在我看来,您真正想做的是根据状态交换视图,例如可以使用 CardLayout 来完成。

【讨论】:

  • 感谢您的建议。您对 sscce 的看法是正确的。我从不知道在我的示例中应该包含什么以及应该忽略什么。我研究了 CardLayout,这听起来很接近我正在寻找的东西。我会试试的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 2011-01-09
  • 2013-07-19
  • 1970-01-01
  • 2017-02-18
  • 2013-08-13
  • 2021-12-19
  • 1970-01-01
相关资源
最近更新 更多