0

我在 JTabbedPane 中的(多个)JScrollPane 中有一个 JTextArea。

我需要访问 JTextArea。如果我没有 JScrollPane,我可以这样做:

JTextArea c = (JTextArea)jTabbedPane1.getComponentAt(i);

在 JScrollPane 中我将如何获得它?

干杯,加兹勒。

4

3 回答 3

5

听起来你会在那边陷入一堆乱七八糟的参考资料(至少这就是我过去发生的事情)。

我建议您有一个中间对象来为您负责这些依赖项,并将“业务”方法移到那里。

因此,与其添加组件并丢失引用(或者最糟糕的是,在整个地方复制引用),您可以使用这个具有引用的对象:

class AppMediator {
     private JTextArea area;
     private JTabbetPane pane;

     // etc. 

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

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

于 2009-12-02T17:22:36.433 回答
3

这条线看起来很复杂,但我认为这样做可以。

JTextArea c = (JTextArea) (((JViewportView) (((JScrollPane) jTabbedPane1.getComponentAt(i)).getViewport()))).getView();

但我认为将您TextAreaArrayList.
所以你可以这样做:

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

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

新建一个是这样的:

JTextArea c = new JTextArea();
jTabbedPane1.addTab("Title", new JScrollPane(c));
listAreas.add(c);

希望这可以帮助。

于 2009-12-02T17:24:21.480 回答
2

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

scrollPane.getViewport().getView()
于 2009-12-04T11:21:25.700 回答