gpt4 book ai didi

java - 如何在另一个类中使用一个类的代码? ( java )

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:00 31 4
gpt4 key购买 nike

我正在制作一款坦克游戏,为了避免冗余,我正在制作扩展类。我的 MenuPanel 看起来像这个 atm(我只写了对问题重要的代码)(knop = 按钮的荷兰语)

public class MenuPanel extends JPanel implements ActionListener
{

private JButton playKnop, highScoreKnop, quitKnop, HTPKnop;
private ImageIcon play, HS, quit, HTP;
private Tanks mainVenster;

public MenuPanel(Tanks mainVenster)
{
this.mainVenster = mainVenster;
this.setLayout(null);

int x = 95;
int width = 200;
int height = 50;


play = new ImageIcon(PlayPanel.class.getResource(/buttons/PLAY.png));
playKnop = new JButton(play);
playKnop.setBounds(x, y, width, height);
playKnop.addActionListener(this);

HS = new ImageIcon(PlayPanel.class.getResource(/buttons/HS.png));
highScoreKnop = new JButton(HS);
highScoreKnop.setBounds(x, 460, width, height);
highScoreKnop.addActionListener(this);

HTP = new ImageIcon(PlayPanel.class.getResource(/buttons/HTP.png));
HTPKnop = new JButton(HTP);
HTPKnop.setBounds(x, 515, width, height);
HTPKnop.addActionListener(this);

quit = new ImageIcon(PlayPanel.class.getResource(/buttons/QUIT.png));
quitKnop = new JButton(quit);
quitKnop.setBounds(x, 570, width, height);
quitKnop.addActionListener(this);

this.add(playKnop);
this.add(quitKnop);
this.add(HTPKnop);
this.add(highScoreKnop);

validate();
}
}

因为制作按钮的代码完全一样(除了 backgroundPath 和 y 坐标)我做了一个类按钮:

package menu;

import java.awt.Image;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;

public class button
{


public JButton button;
public ImageIcon buttonImage;

public int x = 95;
public int width = 200;
public int height = 50;

public String backgroundPath;
public int y;



public button(String backgroundPath, int y)
{
this.backgroundPath = backgroundPath;
this.y = y;

buttonImage = new ImageIcon(PlayPanel.class.getResource(backgroundPath));
button = new JButton();
button.setBounds(x, y, width, height);;
button.addActionListener(this);
}



}

这样,我的 menuPanel 可能看起来像这样:

    package menu;

@SuppressWarnings("serial")
public class MenuPanel extends JPanel implements ActionListener
{

private button playKnop, highScoreKnop, quitKnop, HTPKnop;
private JTextField naam;
private Tanks mainVenster;



public MenuPanel(Tanks mainVenster)
{
this.mainVenster = mainVenster;
this.setLayout(null);

playKnop = new button("/buttons/PLAY.png", 350);
highScoreKnop = new button("/buttons/HS.png", 460);
quitKnop = new button("/buttons/QUIT.png", 515);
HTPKnop = new button("/buttons/HTP.png", 570);


this.add(playKnop);
this.add(quitKnop);
this.add(HTPKnop);
this.add(highScoreKnop);


validate();

}


}

我不知道为什么,但是当我这样做时,按钮不会出现,尽管按钮类中的代码是正确的(当我在 menuPanel 本身中使用代码时它起作用)

我不知道如何解决这个问题,而且我的整个 JavaProject 中有多个这样的问题,但如果有人能向我解释如何解决这个问题,我就可以摆脱项目中的所有冗余。

提前致谢,萝拉

非常感谢大家!你的答案组合帮助我让按钮出现,但由于某种原因,图像没有加载它们。我的代码现在看起来像:

公共(public)类 MenuPanel 扩展 JPanel 实现 ActionListener{

private Button playKnop, highScoreKnop, quitKnop, HTPKnop;

private Tanks mainVenster;

int x = 95, width = 200, height = 50;

public MenuPanel(Tanks mainVenster)
{
this.mainVenster = mainVenster;
this.setLayout(null);

playKnop = new Button("/buttons/PLAY.png", 350, this);
highScoreKnop = new Button("/buttons/HS.png", 460, this);
quitKnop = new Button("/buttons/QUIT.png", 515, this);
HTPKnop = new Button("/buttons/HTP.png", 570, this);

this.add(playKnop);
this.add(quitKnop);
this.add(HTPKnop);
this.add(highScoreKnop);

validate();

}

public class Button extends JButton
{
JButton button;
ImageIcon buttonImage;

String backgroundPath;
int y;


public Button(String backgroundPath, int y, MenuPanel menuPanel)
{
super();
this.backgroundPath = backgroundPath;
this.y = y;

buttonImage = new ImageIcon(PlayPanel.class.getResource(backgroundPath));
this.setBounds(x, y, width, height);;
this.addActionListener(menuPanel);
}
}

(所有按钮都有效!)

最佳答案

首先,作为约定,所有类名都应以大写字母开头,这不影响编译,但是是一种很好的做法。

现在,对于您的实际问题,对我来说突出的第一件事是您的 Button 类没有扩展任何内容。这对我来说似乎是它没有出现在屏幕上的原因。我建议让 Button 扩展 JButton:

public class Button extends JButton {
// Implementation Code
}

这类似于您的 MenuPanel 扩展 JPanel 的方式。 JPanel 无法呈现您编写的自定义 Button。通过扩展 JButton,它将能够呈现它,因为它知道如何与 JButton

交互

关于java - 如何在另一个类中使用一个类的代码? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30096350/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com