【问题标题】:Why aren't my graphics showing? [closed]为什么我的图形不显示? [关闭]
【发布时间】:2017-11-28 16:54:29
【问题描述】:

我是一个业余的java程序员,我想做一个类似SpaceInvaders的游戏。

我想知道为什么当我尝试通过面板添加我的 paintComponent Graphic 时我的框架是空白的,但是当我定期添加我的代码时它会显示所有结果?

这是我在没有面板的情况下添加图形并且没有冲突时的对象类:

package SS;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.Serializable;
import java.util.*;
public class objects extends JPanel{
private int rand1, rand2, y;
int x=0;
Random rand = new Random();
public class picture extends JPanel{
@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    this.setBackground(Color.BLACK);
    for (int c=0;c<=1000;c++){
        g.setColor(Color.yellow);
        rand1=rand.nextInt(1920);
        rand2=rand.nextInt(720);
        g.drawOval(rand1, rand2, 1, 1);}
    g.setColor(Color.MAGENTA);
    g.fillRect(1920/2-x,720-100+y, 50, 50);
        }
    }
}

现在我的对象类的这个版本产生了一个空白框架

package SS;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.Serializable;
import java.util.*;
public class objects extends JPanel{
private int rand1, rand2, y;
int x=0;
Random rand = new Random();
public objects(){
    JPanel jp = new JPanel();
    picture p = new picture();
    jp.add(p);
}
public class picture extends JPanel{
@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    this.setBackground(Color.BLACK);
    for (int c=0;c<=1000;c++){
        g.setColor(Color.yellow);
        rand1=rand.nextInt(1920);
        rand2=rand.nextInt(720);
        g.drawOval(rand1, rand2, 1, 1);}
    g.setColor(Color.MAGENTA);
    g.fillRect(1920/2-x,720-100+y, 50, 50);
        }
    }
}

我围绕paintComponent 制作一个外部类的目的是我可以用它制作一个组件以用于将来的键绑定。

它快把我逼疯了!我搜索了这个网站,我找不到任何东西!如果有人能告诉我原因和解决方案,我将不胜感激:)

这是我的主要课程

package SS;
import javax.swing.JFrame;
public class mainframe {
    public static void main(String[] args){
        JFrame mainFrame = new JFrame();
        mainFrame.setBounds(0, 0, 1920, 720);
        mainFrame.setResizable(false);
        mainFrame.getContentPane().add(new objects());
        mainFrame.setDefaultCloseOperation(mainFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
    }
}

对于我在这篇文章中所说的任何内容,我都愿意接受批评和适当的措辞。

只是重复我的意思: 我想将我用paintComponent 方法制作的图形添加到列为jp 的jpanel,然后将该jpanel 添加到我在mainFrame 类中的框架中

如果我错过了什么也很抱歉,这是我在 StackOverflow 上的第一篇文章。

【问题讨论】:

  • 我尝试通过文本框格式添加代码,但它不允许我添加它,所以我截取了屏幕截图。对不起!
  • 欢迎来到 StackOverflow!不鼓励发布您的代码图像,因为链接可能会在将来失效,并且通常会使它们更难阅读。如果您可以直接使用代码块在答案中发布您的代码,那就太好了。编辑:刚刚看到你上面的评论。尝试时遇到什么错误?
  • 将来,您必须将代码显示为代码,而不是图像。我们无法将图像复制到我们的 IDE 中并运行它们。如果网站告诉您代码太大,请缩短它,但请尝试确保它仍然可以为我们编译和运行,minimal reproducible example。请仔细阅读help center 的如何提问部分。
  • 管理员您好,我现在正在更正帖子中的错误,并感谢 Rome_Leader 伸出援手,但这只是对我的指示不明确,我想通了。谢谢!

标签: java swing paintcomponent


【解决方案1】:

在第二个示例中,您将picture 面板添加到objects 构造函数中的新jp 面板,但该新面板并未添加到objects 本身。尝试在objects构造函数的末尾添加以下行:this.add(jp);

关于如何指定首选尺寸的更新:

public class picture extends JPanel{

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

【讨论】:

  • 非常感谢!图形显示在框架中,但在框架的中间顶部却是一个极小的正方形。如果我需要进一步的帮助,我会发布它。再次,非常感谢!
  • 由于您将自定义绘制逻辑添加到您的picture 面板并且没有添加任何其他 Swing 组件,因此布局管理器不知道您的面板需要制作多大。尝试覆盖 getPreferredSize 并指定您希望它具有的大小。请参阅我的更新答案。
  • 您好,我已经尝试过了,它似乎可以解决我的问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-07-14
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多