Tôi đang làm một trò chơi xe tăng và để tránh sự thừa tôi đang làm cho các lớp học để mở rộng. My MenuPanel trông giống như atm này (Tôi chỉ viết mã mà mang đầy đủ các câu hỏi) (Knop = dutch cho nút)Cách sử dụng mã từ lớp này sang lớp khác? (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();
}
}
vì mã để làm cho các nút là giống hệt nhau (trừ cho backgroundPath và y phối hợp) tôi đã thực hiện một nút lớp:
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);
}
}
theo cách đó, menuPanel tôi có thể nhìn như thế này:
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();
}
}
Tôi không biết tại sao, nhưng khi tôi làm điều này các nút sẽ không xuất hiện, mặc dù mã từ lớp nút là chính xác (bc khi tôi sử dụng mã trong menuPanel chính nó hoạt động)
I don 't biết làm thế nào để khắc phục vấn đề này và tôi có nhiều vấn đề như thế này trong toàn bộ JavaProject của tôi, nhưng nếu ai đó có thể giải thích cho tôi làm thế nào để sửa lỗi này tôi có thể thoát khỏi tất cả các dự phòng trong dự án của tôi.
Cảm ơn trước, Lola
Cảm ơn tất cả các bạn rất nhiều! sự kết hợp các câu trả lời của bạn đã giúp tôi cho phép các nút xuất hiện, nhưng vì một số lý do khiến hình ảnh không tải với chúng. mã của tôi bây giờ trông giống như:
public class MenuPanel kéo dài JPanel thực hiện 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);
}
}
}
(tất cả các nút làm việc!)
Khi bạn vượt qua 'this' bạn thực sự chuyển một tham chiếu đến cá thể của Lớp đó là' MenuPanel' trong trường hợp của bạn. Bằng cách này nó đã giải quyết vấn đề của bạn? –
vâng cảm ơn bạn rất nhiều, sự kết hợp các câu trả lời tôi nhận được đã giúp tôi rất nhiều. mọi thứ đều hiệu quả nhưng tôi có một câu hỏi cuối cùng. tôi muốn sử dụng mã này là nhiều bảng vì vậy tôi cần một tham số cho 'MenuPanel menuPanel' trong constructor. bạn có biết thông số nào tôi có thể sử dụng không? i có nghĩa là các bảng khác nhau như 'HighscorePanel' 'PlayPanel' 'HowToPlayPanel' 'QuitPanel' .... – Lola