Java CardLayout没有';使用JButtons向arraylist添加static时,不显示JButtons

Java CardLayout没有';使用JButtons向arraylist添加static时,不显示JButtons,java,swing,static,jbutton,cardlayout,Java,Swing,Static,Jbutton,Cardlayout,我不知道怎么了,但很有趣。我用卡片布局和面板编写代码。在带有CardLayout的面板上,我从ArrayList中放入JButtons,它正在工作 看起来是这样的: 底部带有CardLayout的面板带有粉色JButtons…..我的部分代码是 public class Controller extends JPanel { ArrayList<JButton> tnp=new ArrayList<JButton>(); ArrayList<JButton>

我不知道怎么了,但很有趣。我用
卡片布局
和面板编写代码。在带有
CardLayout
的面板上,我从
ArrayList
中放入
JButton
s,它正在工作

看起来是这样的:

底部带有
CardLayout
的面板带有粉色
JButton
s…..我的部分代码是

public class Controller extends JPanel {

ArrayList<JButton> tnp=new ArrayList<JButton>();
ArrayList<JButton> sokp=new ArrayList<JButton>();
ArrayList<JButton> alkp=new ArrayList<JButton>();


CardLayout cardlayout=new CardLayout();
JPanel cardpanel = new JPanel(cardlayout);
我的应用程序如下所示:

static ArrayList<JButton> tnp=new ArrayList<JButton>();
static ArrayList<JButton> sokp=new ArrayList<JButton>();
static ArrayList<JButton> alkp=new ArrayList<JButton>();

正如您所看到的,该程序仍然显示带有CardLayout的面板(红色边框为
),但显示的是来自

static ArrayList<JButton> tnp=new ArrayList<JButton>();
static ArrayList<JButton> sokp=new ArrayList<JButton>();
static ArrayList<JButton> alkp=new ArrayList<JButton>();
static ArrayList tnp=new ArrayList();
静态ArrayList sokp=新ArrayList();
静态ArrayList alkp=新ArrayList();
迷路了!为什么?


我不明白。一个ArrayList用于一个带有cardlayout的面板,该面板用于所有JTabbedPane,我希望能够从另一个类访问该列表(这就是为什么我希望是静态的),以便向该面板添加或删除按钮。但是我不能,没有任何东西会添加到arraylist中。

静态字段是属于它在其中声明的类的字段。而实例(非静态)字段属于它在其中声明的类的实例

因此,如果您具备以下条件:

public class Controller {
    public static List<JButton> staticList = new ArrayList<JButton>();
    public List<JButton> instanceList = new ArrayList<JButton>();

    ...
}
每个控制器都有自己的实例列表,但它们都共享一个唯一的静态列表

您希望每个控制器都有自己的按钮,因此绝对不希望使用静态列表

如果要从另一个对象访问控制器,只需将控制器传递给另一个类实例:

Controller c1 = new Controller();
OtherClass other = new OtherClass(c1);
OtherClass
中,您可以使用控制器执行任何操作:

private Controller theController;

public OtherClass(Controller controller) {
    this.theController = theController;
}

public void foo() {
    // call any method you want from theController
}

您需要将每个对象添加到此
布局中
A
JButton
不能添加到多个面板中。注意父子关系!我不明白。一个ArrayList用于一个带有cardlayout的
面板
,该面板用于所有JTabbedPane,我希望能够从另一个类访问该列表(这就是为什么我希望是静态的),以便向该
面板
添加或删除按钮。但我做不到,没有任何东西可以添加到arraylist
静态
中,它很少是一个解决方案(更常见的是一个问题或错误设计的迹象)。为什么要将它们更改为
static
?所以,我从类控制器为访问列表创建了另一个类,并且我可以使用方法foo来实现它?谢谢,我希望我能做到,我有点困惑。不,你不能为了访问列表而再上一节课。你问了如何从另一个类访问控制器列表,上面告诉了你怎么做,我明白了。但我有一个类应用程序,在其中我制作了对象控制器和类表的对象,在类表中我制作了按钮,当我按下它时,它会制作类JOptionPaneMultiInput的对象,在那个类中我需要访问控制器,所以我需要制作JOptionPaneMultiInput(控制器)。我说得对吗?如何连接所有这些类我必须连接到所有这些类使私有控制器成为控制器;对所有的人来说,是的,就是这样。正如您将一个真实对象(例如电话)传递给某人以让其使用一样,您将控制器的引用传递给其他对象以使其允许其使用控制器。
private Controller theController;

public OtherClass(Controller controller) {
    this.theController = theController;
}

public void foo() {
    // call any method you want from theController
}