【问题标题】:Accessing a JTextArea in a JScrollPane在 JScrollPane 中访问 JTextArea
【发布时间】:2009-12-02 17:10:18
【问题描述】:

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

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

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

在 JScrollPane 中如何获取它?

干杯, 加兹勒。

【问题讨论】:

    标签: java swing jtextarea


    【解决方案1】:

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

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

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

    class AppMediator {
         private JTextArea area;
         private JTabbetPane pane;
    
         // etc. 
    
         public void doSomethingWithText() {
              this.area.getText(); // etc 
         }
     }
    

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

    【讨论】:

      【解决方案2】:

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

      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);
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

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

        scrollPane.getViewport().getView()
        

        【讨论】:

          猜你喜欢
          • 2016-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-29
          • 1970-01-01
          • 2017-03-05
          • 2023-03-30
          相关资源
          最近更新 更多