当我使用JButton向arraylist添加静态时,CardLayout不显示JButton

时间:2013-02-23 14:00:44

标签: java swing static jbutton cardlayout

我不知道出了什么问题,但这很有意思。我用CardLayout和面板制作了代码。在CardLayout面板上,我从JButton添加了ArrayList,它正在运行......

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

CardLayout的面板底部是粉红色的JButton .....我的部分代码是

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

输了!为什么呢?

我不是unerstand。一个ArrayList用于一个带有cardlayout的面板,该面板适用于所有JTabbedPane,我希望能够从另一个类访问该列表(这就是我想要静态的原因),以便向该面板添加或删除按钮。但我不能,没有什么能增加那个arraylist。

1 个答案:

答案 0 :(得分: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
}