gpt4 book ai didi

Java:如何使用具有多个类的持卡人

转载 作者:行者123 更新时间:2023-12-01 23:41:38 24 4
gpt4 key购买 nike

我正在用 Java 编程,尝试使用持卡人在 2 个 JPanel 之间切换,每个 JPanel 都是其自己类的扩展。我认为我理解基本概念,但在调用类(class)时,我当前的修订版出现了错误。我遇到了空指针异常,我认为这是一个结构问题,但我不确定如何或为什么。

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 个独立的类。这样我就可以分离代码,以保持所有内容独立且有序。

最佳答案

您的骨架类有一个“菜单”成员,但它没有设置在我可以看到的任何地方。构造函数声明其自己的“菜单”局部变量,该变量对于构造函数来说是局部的并隐藏成员。在构造函数内设置“menu”不会设置该成员。我没有看到其他任何地方设置了“菜单”成员,除非我错过了某些内容或者除非同一包中的另一个类正在设置它。

关于Java:如何使用具有多个类的持卡人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822303/

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