Java 我怎样才能用两种不同的等级在面板上作画?

Java 我怎样才能用两种不同的等级在面板上作画?,java,swing,jpanel,jcomponent,border-layout,Java,Swing,Jpanel,Jcomponent,Border Layout,我正在用Java做一个项目,我必须复制Leemings的游戏,我在尝试构建世界时遇到了一个问题: 我创建了“fenetre”类(英语窗口)、Leemings类和Carreau类(Leemings可以行走的平台) 问题是,我在面板上画了一只旅鼠,我还想画一个平台,在这个平台上,旅鼠可以在同一个面板上行走,但我不能在同一个面板上画,所以我只能看到平台,但我再也看不到旅鼠了 我在这里分享代码: package-lemmingsLight; 导入java.awt.Graphics; 导入java.awt

我正在用Java做一个项目,我必须复制Leemings的游戏,我在尝试构建世界时遇到了一个问题:

我创建了“fenetre”类(英语窗口)、Leemings类和Carreau类(Leemings可以行走的平台)

问题是,我在面板上画了一只旅鼠,我还想画一个平台,在这个平台上,旅鼠可以在同一个面板上行走,但我不能在同一个面板上画,所以我只能看到平台,但我再也看不到旅鼠了

我在这里分享代码:

package-lemmingsLight;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseListener;
导入javax.swing.JButton;
导入javax.swing.JComponent;
导入javax.swing.JPanel;
导入java.awt.BorderLayout;
导入java.awt.Color;
公共类Fenetre扩展JComponent{
公共场所(){
//准备一个面板来显示旅鼠
JPanel lemmings=新的JPanel();
setLayout(newborderlayout());
旅鼠后缘(0,0,500,250);
旅鼠。挫折地(颜色。白色);
添加(旅鼠);
//将旅鼠添加到面板中
旅鼠myTestLemming=新旅鼠();
添加(myTestLemming,BorderLayout.CENTER);
//将平台添加到同一面板
Carreau pf=新的Carreau();
旅鼠。添加(pf);
MouseAdapter m=新的MyMouse(此);
addMouseListener(新MyMouse(this));
JPanel lave=new JPanel();//火->如果韭菜倒下,韭菜就会死亡(或燃烧)
后退的距离(0,250,500,75);
淡紫色背景(颜色:红色);
添加(lave);
JPanel panCom=new JPanel();//控件或命令
panCom.setBounds(0320500200);
panCom.背景(颜色:灰色);
添加(panCom);
JButton b1=新JButton(“暂停”);
JButton b2=新JButton(“bloquer”);
JButton b3=新JButton(“creuser”);
JButton b4=新JButton(“隧道”);
JButton b5=新JButton(“bombe”);
JButton b6=新JButton(“escalier”);
JButton b7=新JButton(“grimper”);
JButton b8=新的JButton(“降落伞”);
b1.addActionListener(新ActionListener(){
已执行的公共无效行动(行动事件ae){
//旅鼠。设置状态(正常);
}
});
附件(b1);
附件(b2);
附录(b3);
附录(b4);
附录(b5);
附录(b6);
附录(b7);
附录(b8);
}
}
“Carreau”类:

package-lemmingsLight;
导入java.awt.Color;
导入java.awt.Graphics;
导入javax.swing.JComponent;
//将速溶级酒倒在咖啡杯上
公共类Carreau扩展JComponent{
@凌驾
公共空间涂料(图g){
超级油漆(g);
g、 setColor(Color.BLUE);
g、 fillRect(5520020020);
}
}
还有旅鼠班:

package-lemmingsLight;
导入java.awt.Color;
导入java.awt.Graphics;
导入javax.swing.JComponent;
公共类旅鼠扩展JComponent{
私人旅鼠州;
公共旅鼠状态getState(){
返回状态;
}
公共无效设置状态(LemmingsState状态){
this.state=状态;
}
@凌驾
公共空间涂料(图g){
超级油漆(g);
g、 设置颜色(颜色为黑色);
g、 fillRect(45,150,20,20);
}
}
如果要查看主视图,请执行以下操作:

package-lemmingsLight;
导入java.awt.Color;
导入java.awt.Graphics;
导入javax.swing.JButton;
导入javax.swing.JFrame;
公共类主{
公共静态void main(字符串[]args){
JFrame=新的JFrame(“旅鼠”);
Fenetre f=新的Fenetre();
f、 挫折地面(颜色:白色);
frame.setContentPane(f);
框架。设置尺寸(500410);
//frame.setSize(f.getSize());
//frame.setresizeable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
我正在添加LemmingState类以尝试以下代码:

package-lemmingsLight;
公共旅鼠国家{//旅鼠国家
正常,,
炸弹客,
隧道工,
Bloquer,
格林普尔,
查彭蒂埃,
前辈,
跳伞者,
GLemmingState(){
}
}

感谢您阅读我的文章

您需要一个类来扩展JPanel(fenetre)和数组/对象列表(在您的例子中是Lemmings和Carreau列表),这两个对象都应该有一个void函数,您可以调用它并传递图形,因此:

public class Lemmings{

public void draw(Graphics2D g2d)
{
//draw something here
}
}
然后在fenetre in paint函数中,您只需调用函数draw on数组中的每个对象

public class Fenetre extends JPanel{
List<Lemmings> lems = new ArrayList<>(); //add the objects into this one
    @Override
    public void paint(Graphics g)
    {
    Graphics2D g2d = (Graphics2D)g;
         for(int i = 0; i < lems.size(); i++)
         {
              lems.get(i).draw(g2d);
         }
    }
    }
公共类Fenetre扩展了JPanel{
List lems=new ArrayList();//将对象添加到此列表中
@凌驾
公共空间涂料(图g)
{
Graphics2D g2d=(Graphics2D)g;
对于(int i=0;i
如果我们想帮助您,我们需要更多的详细信息,没有LemmingsState类,任何人都无法复制您的代码。是的,很抱歉,我添加了LemmingsState类“如果您想查看主视图:”我想查看主视图。请将
Main
重命名为类似
LemmingsMain
(这样它就不会与我的垃圾代码包中那些自称非常缺乏想象力的
Main
的类发生冲突),将所有其他类降级为默认访问(这样它们就可以放在同一个源代码中进行一次复制/粘贴),测试它编译和运行时是否没有