Я делаю игру в танк и избегаю избыточности. Я делаю классы для расширения. My MenuPanel выглядит следующим образом атм (я только написал код, который имеет значение для вопроса) (Кноп = голландец кнопки)Как использовать код из одного класса в другом? (Java)
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 и у-координаты) Я сделал кнопку класса:
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();
}
}
Я не знаю, почему, но когда я это сделаю, кнопки не появятся, хотя код из класса кнопок верен (bc, когда я использую код в самом меню панели).
Я не знаю Не знаю, как исправить эту проблему, и у меня есть множество проблем, подобных этому в моем JavaProject, но если кто-то может объяснить мне, как исправить это, я мог бы избавиться от всей избыточности моего проекта.
Спасибо заранее, Lola
Спасибо всем большое! сочетание ваших ответов помогло мне отобразить кнопки, но по какой-то причине изображения не загружаются с ними. мой код теперь выглядит следующим образом:
общественный класс 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);
}
}
}
(все кнопки работают!)
Когда вы передаете 'this', вы фактически передаете ссылку на экземпляр этого класса, который является' MenuPanel' в вашем случае. Кстати, это решило вашу проблему? –
Да, большое спасибо, мне очень помогла комбинация ответов, которые я получил. все работает, но у меня есть последний вопрос. Я хочу использовать этот код, это несколько панелей, поэтому мне нужен параметр для «MenuPanel menuPanel» в конструкторе. знаете ли вы, какой параметр я мог бы использовать? Я имею в виду разные панели, такие как «HighscorePanel» «PlayPanel» «HowToPlayPanel» «QuitPanel» .... – Lola