Java 如何将值(数组或arraylist)从一个窗格传递到另一个窗格?

Java 如何将值(数组或arraylist)从一个窗格传递到另一个窗格?,java,swing,oop,jpanel,Java,Swing,Oop,Jpanel,这是我的主要课程代码: public static void main(String[] args) { JFrame f= new JFrame ("My Frame"); f.setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE); JTabbedPane tp = new JTabbedPane(); tp.addTab("Pane1", new PaneFirst()); tp.addTab("Pane2", new PaneSec

这是我的主要课程代码:

public static void main(String[] args) {

 JFrame f= new JFrame ("My Frame");
 f.setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE);

 JTabbedPane tp = new JTabbedPane();
 tp.addTab("Pane1", new PaneFirst());
 tp.addTab("Pane2", new PaneSecond());

 f.add(tp);
 f.pack();
 f.setVisible(true);
 }
在PaneFirst中,我有一个用户输入值(textfields)的列表,假设我有5个。我将每个值存储到一个数组(或者arraylist)中。如何将这5个值从PaneFirst传递到PaneSecond


(对不起,我不熟悉Java和面向对象编程语言)

您可以提供对第一个窗格的第二个窗格的引用。比如:

 PaneSecond pane2 = new PaneSecond();
 JTabbedPane tp = new JTabbedPane();
 tp.addTab("Pane1", new PaneFirst(pane2));
 tp.addTab("Pane2", pane2);

然后,第一个窗格可以存储这些值,并在以后使用它从第二个窗格调用方法。

您确实不应该将这些值存储在窗格对象(“视图”)上,而是创建一个单独的类来保存这些值(“模型”)

然后,您可以将对模型的引用传递给两个窗格,如果其中一个窗格更改了模型类上的值,那么另一个窗格也将看到这些更改。下面这个简单的例子是用代码来展示这个想法。您的模型看起来会有所不同,但它应该给出如何实现、创建和使用它的想法

public class Model {
   private List<String> values = new ArrayList<String>();
   public void add(String s) {
      values.add(s);
   }
   public void remove(String s) {
      values.remove(s);
   }
   public void get(i) {
      values.get(i);
   }
   // ...

}   

public static void main(String[] args) {

 JFrame f= new JFrame ("My Frame");
 f.setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE);

 JTabbedPane tp = new JTabbedPane();
 Model model = new Model();
 tp.addTab("Pane1", new PaneFirst(model));
 tp.addTab("Pane2", new PaneSecond(model));

 f.add(tp);
 f.pack();
 f.setVisible(true);
}
公共类模型{
私有列表值=新的ArrayList();
公共无效添加(字符串s){
价值。添加(s);
}
公共无效删除(字符串s){
值。删除(s);
}
公众假期(一){
获取(i);
}
// ...
}   
公共静态void main(字符串[]args){
JFrame f=新JFrame(“我的框架”);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane tp=新的JTabbedPane();
模型=新模型();
tp.addTab(“Pane1”,新的PaneFirst(model));
tp.addTab(“Pane2”,新的panesesecond(model));
f、 添加(tp);
f、 包装();
f、 setVisible(真);
}

这是MVC模式吗?我有一个愚蠢的问题,“我必须分离模型类文件和主类文件吗?”它提供了模型-视图分离,这使得代码在大型项目中更易于维护。一般来说,这是一个更好的设计,但对于小于1000行代码的小项目,我并不总是为它而烦恼。@javaIsTheBest-从技术上讲,你可以混合建模视图,但如果你将这些部分分开,你很快就会看到,维护和交流软件变得容易多了。我相信它被否决的原因是它在UI开发中显示了一种非常糟糕的做法(尽管它可以工作)。换句话说,我们可以说这是一个“快速而肮脏的黑客”。