这是我的代码,它是一个人和一个背景,但一次只显示一件事,或者有时什么也不显示。 我有一个 Brain 类、一个 Frame 类、一个 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);
}
}
最佳答案
I think it has something to do with layouts
是的,您应该阅读 Using Layout Managers 上的 Swing 教程更好地理解它们的工作原理和示例。
JFrame 的默认布局管理器是 BorderLayout。您不能只将 3 个组件添加到 BorderLayout 的同一区域。
我不知道你想要完成什么,但从简单开始。既然你有背景,基本代码应该是这样的:
redPlayer = new RedPlayer();
background = new Background();
background.add( redPlayer );
frame.addComponent(background);
因此红色播放器应该显示在背景之上。并且背景被添加到框架中。
当然,您必须为背景使用适当的布局管理器。并且您必须确保在进行自定义绘制时重写 getPreferredSize() 方法,以便布局管理器知道每个组件的大小应该是多少。
首先让这两个组件工作,然后继续第三个组件。
关于java - 将多个图形对象添加到一个 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996126/