我正在用 Java 编程,试图使用持卡人在 2 个 JPanel 之间切换,每个 JPanel 都是它们自己类的扩展。我想我理解了基本概念,但是在调用类时,我在当前的修订版中遇到了错误。我得到一个空指针异常,我认为这是一个结构性问题,但我不确定如何或为什么。
main方法指向这个类
public class Skeleton implements ActionListener{
JPanel cardHolder;
CardLayout cards;
String cardA = "A";
String cardB = "B";
JPanel Jboard;
JPanel Jmenu;
JFrame frame2;
Board board;
Menu menu;
boolean menuSet;
boolean boardSet;
Timer timer;
public class Switcher implements ActionListener{
String card;
Switcher(String card){
this.card = card;
}
@Override
public void actionPerformed(ActionEvent e) {
cards.show(cardHolder, card);
}
}
public Skeleton(JFrame frame){
JPanel menu = new Menu();
JPanel board = new Board();
JFrame frame2 = frame;
timer = new Timer(5, this);
timer.start();
cardHolder = new JPanel();
cards = new CardLayout();
cardHolder.setLayout(cards);
cardHolder.add(menu, cardA);
cardHolder.add(board, cardB);
frame2.add(cardHolder);
frame2.revalidate();
frame2.setVisible(true);
}
public JFrame getSkeleton(){
return frame2;
}
public JPanel getCardHolder(){
return cardHolder;
}
public void checkStatus(){
if (menuSet == true){
new Switcher(cardB);
boardSet = false;
}
if (boardSet == true){
new Switcher(cardA);
menuSet = false;
}
}
@Override
public void actionPerformed(ActionEvent e) {
menuSet = menu.getMenuset();
boardSet = board.getBoardset();
checkStatus();
}
}
这是板级,我试图切换的 JPanel 之一
public class Board extends JPanel{
boolean boardset;
Menu menu = new Menu();
public Board(){
setBackground(Color.WHITE);
}
public JPanel getPanel(){
return this;
}
public void setBoardset(boolean x){
boardset = x;
}
public boolean getBoardset(){
return boardset;
}
}
这是另一个 JPanel 类,其中包含一个用于切换到另一个 JPanel 类的按钮。这也是最初使用的起始 JPanel。
public class Menu extends JPanel implements ActionListener{
boolean menuset;
public Menu(){
setBackground(Color.BLACK);
JButton button = new JButton("hello");
button.addActionListener(this);
this.add(button);
}
public JPanel getPanel(){
return this;
}
@Override
public void actionPerformed(ActionEvent e) {
menuset = true;
}
public void setMenuset(boolean x){
menuset = x;
}
public boolean getMenuset(){
return menuset;
}
}
就像我说的,我得到一个空指针异常。它发生在 Skeleton() 类的这一行
menuSet = menu.getMenuset();
上面的行就在上面的 actionPerformed 事件之后(来自计时器),我已经对计时器进行了一些测试,它可以执行基本的打印语句,但是每当我尝试在 actionPerformed 中使用“菜单”或“板”实例时,我得到这个空指针异常。
我会很感激任何建议。我知道我这样做的方式可能有点复杂。如果有人对更好的方法有任何建议,那也会有所帮助。我的主要目标是能够从一个包含持卡人的主类中调用 2 个单独的类。这样我就可以分离代码以保持一切隔离和有序。