Java 访问JScrollPane中的JTextArea

Java 访问JScrollPane中的JTextArea,java,swing,jtextarea,Java,Swing,Jtextarea,我在(多个)JTabbedPane中有一个JTextArea 我需要进入JTextArea。如果没有JScrollPane,我可以: JTextArea c = (JTextArea)jTabbedPane1.getComponentAt(i); 在JScrollPane中如何获得它 干杯, Gazler.听起来你会在那里遇到一堆参考资料(至少过去我就是这样) 我建议您使用一个中间对象来管理这些依赖关系,并将“业务”方法转移到那里 因此,您可以使用此对象,而不是添加组件并丢失引用(或者最糟糕的

我在(多个)JTabbedPane中有一个JTextArea

我需要进入JTextArea。如果没有JScrollPane,我可以:

JTextArea c = (JTextArea)jTabbedPane1.getComponentAt(i);
在JScrollPane中如何获得它

干杯,
Gazler.

听起来你会在那里遇到一堆参考资料(至少过去我就是这样)

我建议您使用一个中间对象来管理这些依赖关系,并将“业务”方法转移到那里

因此,您可以使用此对象,而不是添加组件并丢失引用(或者最糟糕的是,将引用复制到所有位置),该对象将具有引用:

class AppMediator {
     private JTextArea area;
     private JTabbetPane pane;

     // etc. 

     public void doSomethingWithText() {
          this.area.getText(); // etc 
     }
 }

请参见设计模式。重点是将所有“视图”对象从它们所在的位置(通常作为子类中的引用)移动到公共中间对象

这条线看起来很复杂,但我想这就行了

JTextArea c = (JTextArea) (((JViewportView) (((JScrollPane) jTabbedPane1.getComponentAt(i)).getViewport()))).getView();
但我认为将您的
文本区域
存储在
数组列表

所以你可以这样做:

List<JTextArea> listAreas = new ArrayList<JTextArea>();

...
JTextArea c = listAreas.get(i);

希望这有帮助。

我更喜欢AppMediator方法,但您也可以这样做

scrollPane.getViewport().getView()
scrollPane.getViewport().getView()