0

这是我的代码,它是一个人和一个背景,但一次只显示一件事,或者有时什么都没有。我有一个大脑类、一个框架类、一个redPlayer 类和一个背景类。它的工作方式是大脑制造一个玩家和一个大脑并将其添加到框架中。

我认为这与布局有关,但我尝试了一切,但没有任何效果。请帮忙!!!

提前致谢。

这是大脑:

 public class Brain 
 {
   private Frame frame;
   private static RedPlayer redPlayer;
   private Background background;
   private SensorKeys sensor;

public Brain()
{
    frame = new Frame();
    redPlayer = new RedPlayer();
    background = new Background();
    sensor = new SensorKeys();

    frame.addComponent(redPlayer);
    frame.addComponent(background);
    frame.addKeySensor(sensor);

    redPlayer.revalidate();
}

public static void setRedPlayerVelX(double vx)
{
    redPlayer.setVelX(vx);
}

public static void setRedPlayerVelY(double vy)
{
    redPlayer.setVelY(vy);
}

public static void makeRedPlayerBullet()
{

}

} `

这是框架类

public class Frame
{
private JFrame jf;

public Frame()
{
    drawFrame();
}

public void drawFrame()
{
    jf = new JFrame();
    jf.setSize(800, 600);
    jf.setLocation(10, 10);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setBackground(Color.WHITE);
    jf.setLayout(null);
}

public void addComponent(JComponent jc)
{
    jc.setBounds(jc.getX(), jc.getY(), 100, 100);
    jf.add(jc);
}

public void addPanel(JPanel jp)
{
    jf.add(jp);
}

public void addKeySensor(KeyListener kl)
{
    jf.addKeyListener(kl);
}

 }

这是播放器类:

public class RedPlayer extends JComponent implements ActionListener
{
private int x,y;
private double velX = 0, velY = 0;
private Timer timer = new Timer(2,this);
private Image redplayer;

public RedPlayer()
{
    x = 100;
    y = 100;

    ImageIcon II = new ImageIcon("redPlayerRight.png");
    redplayer = II.getImage();

    revalidate();
    timer.start();
}

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    Graphics2D graphics = (Graphics2D) g;

    graphics.drawImage(redplayer, x,y, null);
}


public void actionPerformed(ActionEvent arg0) 
{   
    x += velX;
    y += velY;

    repaint();
    revalidate();
}


public void setVelX(double vx)
{
    velX = vx;
}

public void setVelY(double vy)
{
    velY = vy;
}   
}

最后是背景类:

public class Background extends JComponent
{
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    Graphics2D graphics = (Graphics2D) g;

    graphics.setColor(Color.green);
    graphics.fillRect(0, 400, 500, 200);
}
 }
4

1 回答 1

2

我认为这与布局有关

是的,您应该阅读有关使用布局管理器的 Swing 教程,以更好地了解它们的工作原理和示例。

JFrame 的默认布局管理器是 BorderLayout。您不能只将 3 个组件添加到 BorderLayout 的同一区域。

我不知道您要完成什么,但从简单开始。由于您有背景,因此基本代码应类似于:

redPlayer = new RedPlayer();
background = new Background();
background.add( redPlayer );
frame.addComponent(background);

所以红色播放器应该显示在背景之上。并且背景被添加到框架中。

当然,您必须为背景使用适当的布局管理器。并且您必须确保在进行自定义绘制时覆盖 getPreferredSize() 方法,以便布局管理器知道每个组件的大小应该是多少。

先让这两个组件工作,然后再转到第三个组件。

于 2013-06-08T04:58:43.077 回答