我不知道出了什么问题,但这很有意思。我用CardLayout
和面板制作了代码。在CardLayout
面板上,我从JButton
添加了ArrayList
,它正在运行......
它看起来像这样:
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>();
我的申请看起来像这样:
正如您所看到的,程序仍显示带有CardLayout的面板(与red
边界)但来自
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。
答案 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
}