我在 JTabbedPane 中的(多个)JScrollPane 中有一个 JTextArea。
我需要访问 JTextArea。如果我没有 JScrollPane,我可以这样做:
JTextArea c = (JTextArea)jTabbedPane1.getComponentAt(i);
在 JScrollPane 中我将如何获得它?
干杯,加兹勒。
听起来你会在那边陷入一堆乱七八糟的参考资料(至少这就是我过去发生的事情)。
我建议您有一个中间对象来为您负责这些依赖项,并将“业务”方法移到那里。
因此,与其添加组件并丢失引用(或者最糟糕的是,在整个地方复制引用),您可以使用这个具有引用的对象:
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();
但我认为将您TextArea
的ArrayList
.
所以你可以这样做:
List<JTextArea> listAreas = new ArrayList<JTextArea>();
...
JTextArea c = listAreas.get(i);
新建一个是这样的:
JTextArea c = new JTextArea();
jTabbedPane1.addTab("Title", new JScrollPane(c));
listAreas.add(c);
希望这可以帮助。
我更喜欢 AppMediator 方法,但你也可以这样做
scrollPane.getViewport().getView()