java - 当我使用 JButtons 将静态添加到数组列表时,CardLayout 不显示 JButtons

标签 java swing static jbutton cardlayout

我不知道哪里出了问题,但是很有趣。我用 CardLayout 和面板编写了代码。在带有 CardLayout 的面板上,我将 ArrayList 中的 JButton 放入其中,它正在工作......

它看起来像这样: enter image description here

带有CardLayout的面板位于底部,带有粉红色的JButtons.....我的代码的一部分是

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);

但是,当我像这样将静态添加到 ArrayList 时:

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

我的应用程序如下所示:

enter image description here

如您所见,程序仍然显示带有 CardLayout 的面板(边框为 red ),但 JButtons 为

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

输了!为什么?

我不明白。一个 ArrayList 用于带有卡片布局的一个面板,该面板用于所有 JTabbedPane,我想从另一个类访问该列表(这就是为什么我想要静态),以向该面板添加或删除按钮。但我不能,没有任何内容添加到该 arraylist 中。

最佳答案

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

所以,如果您有以下情况:

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

    ...
}

以及以下用户代码:

Controller c1 = new Controller();
Controller c2 = new Controller();

每个 Controller 都有自己的实例列表,但它们都共享一个唯一的静态列表。

您希望每个 Controller 都有自己的按钮,因此您绝对不需要静态列表。

如果您想从另一个对象访问 Controller ,您只需将 Controller 传递给另一个类实例:

Controller c1 = new Controller();
OtherClass other = new OtherClass(c1);

OtherClass 中,您可以使用 Controller 做任何您想做的事情:

private Controller theController;

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

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

关于java - 当我使用 JButtons 将静态添加到数组列表时,CardLayout 不显示 JButtons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041313/

相关文章:

java - 非静态日志能说得过去吗?

c# - 从私有(private)void函数c#中的另一个类访问变量

java - 为什么需要静态修饰符以及如何修复它?

java - 如何使用Netbeans GUI设计从JTable隐藏标题?

Java收据程序不显示结果

java - 有没有办法在 svn 存储库中共享 Eclipse 任务列表?

Java DOM : transforming a node to a root element

java - 如何修改不同窗体上的控件?

java - 如何在 Spring Boot 应用程序中将数据库架构更改从源数据库同步到目标数据库

java - 将 Spring Security 与 JPA 结合使用