1

我不知道出了什么问题,但这很有趣。我用CardLayout和面板编写了代码。在面板上CardLayout我放了JButtons fromArrayList并且它正在工作......

它看起来像这样: 在此处输入图像描述

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

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

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

我的应用程序看起来像这样:

在此处输入图像描述

如您所见,程序仍然显示带有 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 中。

4

1 回答 1

2

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

因此,如果您有以下情况:

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 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
}
于 2013-02-23T14:30:01.270 回答