为什么我的图片不显示?

时间:2017-11-28 16:54:29

标签: java swing paintcomponent

我是一名业余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中的第一篇文章。

1 个答案:

答案 0 :(得分:1)

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

更新如何指定首选尺寸:

public class picture extends JPanel{

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