Я делаю игру, и я пытаюсь избавиться от всей избыточности в моем коде. Все мои панели (PlayPanel
, HighScore
, Quit
, ..) имеют много общих свойств, поэтому я сделал класс IPanel
для распространения на всех моих панелях. это выглядит следующим образом:Могу ли я использовать код из одного класса (конструктор + методы) в другом классе? (java)
package menu;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class IPanel extends JPanel implements ActionListener{
public Image achtergrond;
public Tanks mainVenster;
public String backgroundPath;
public IPanel(String backgroundPath, Tanks mainVenster)
{
super();
this.mainVenster = mainVenster;
this.setLayout(null);
this.backgroundPath = backgroundPath;
achtergrond = new //achtergrond is dutch for background
ImageIcon(getClass().getResource(backgroundPath)).getImage();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(achtergrond, 0, 0, this.getWidth(), this.getHeight(),
this);
}
public void actionPerformed(ActionEvent ae)
{
mainVenster.switchPanel();
}
public void switchPanel(Tanks toActivate)
{
remove(mainVenster);
mainVenster = toActivate;
add(mainVenster); //this is wrong, no idea what to do actually
validate();
repaint();
}
}
Я могу использовать конструктор в других классах, но я не знаю, как использовать paintComponent
и actionPerformed
методов в других классах. Я использую эти 2 метода во всех своих панелях, поэтому считаю, что нет необходимости снова писать методы для всех этих панелей.
пример одного из моих панелей QuitPanel
:
package menu;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class QuitPanel extends JPanel implements ActionListener
{
public Button yesKnop, noKnop;
public JLabel label;
public Tanks mainVenster;
public QuitPanel quitPanel;
public IPanel quit;
public QuitPanel(Tanks mainVenster)
{
quit = new IPanel("/achtergronden/menu.jpg", mainVenster);
int x = 95, width = 200, height = 50;
label = new JLabel("ARE YOU SURE?");
Font font = new Font("Courier", Font.BOLD, 25);
label.setFont(font);
label.setBounds(x+20, 400, width, height);
yesKnop = new Button("/buttons/YES.png",x, 450, this);
noKnop = new Button("/buttons/NO.png",x, 525, this);
this.add(quit);
this.add(label);
this.add(noKnop);
this.add(yesKnop);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == noKnop)
quit.switchPanel(mainVenster); //this is wrong
else if(ae.getSource() == yesKnop)
System.exit(0);
}
}
, как вы можете видеть, я расширил класс с JPanel
, потому что, когда я пытался продлить IPanel
я получил ошибку при public HTPPanel(Tanks mainVenster)
, что сказал
Когда я открываю свой quitPanel, я получаю это:
, так что я знаю, что должно быть частью моего кода правильной, единственная проблема заключается в том, что мой фон не загружается -> (public void paintComponent(Graphics g)
метод)
вопрос является: как я используйте метод i, созданный в классе nr 1 в классе nr 2?
кроме того, NoButton не работает (yesButton работает нормально) -> (public void actionPerformed(ActionEvent ae)
метод) -> также из-за public void switchPanel(Tanks toActivate)
я думаю,
спасибо так много!
это кажется разумным ответом, но я действительно не понимаю, как я могу вызвать конструктор без параметров, которые я хочу ... – Lola