访问另一个类的组件

时间:2014-12-07 06:46:40

标签: java awt jbutton jtextarea

第二课:

@Override
public void actionPerformed(ActionEvent e){
    // TODO Auto-generated method stub
    if(e.getSource() == buy) {  
        System.out.println("hi");
    }
}

我想从另一个类访问JTextArea并用“hi”附加它。 所以这里每次按下购买按钮时会发生什么,另一个课程中的文字区域会附加“hi”

尝试过的解决方案:

第二课

public void somelistener(ccp asd){
    this.asd = asd;
    this.area = asd.getTextArea();
    area.setText("hi");
}

头等舱

public JTextArea getTextArea(){
    return ta;
}

每次按下按钮,textarea中都没有显示。

1 个答案:

答案 0 :(得分:0)

您可以使用带有调整的嵌套类来解决您的问题。您必须将JTextArea组件设置为主类的实例变量。所以第二个类(带有actionListener)可以访问变量。如果在构造函数内创建了JTextArea,则对它的访问受到限制。 例如: -

Public SomeClass{
   private JTextArea txtArea;  // declaring the object here makes it
                                 accessible from nested classes 

   SomeClass(){
       txtArea = new JTextArea(); // initialization of the object
    }
  class Listener(Event evt)
   {
        //Now you xcan use your method :)
   }

}

编辑: -

好的,这是另一个例子。

Public class MyPanel extends JPanel{

 private JButton btnOK;             //declaring JButton and JTextArea as member 
                                    // variables of class MyPanel
 private JTextArea txtArea ;


   MyPanel(){                    //constructor
      setBackground(Color.RED);
      btnOK = new JButton("OK");          // initializing JButton and JTextArea
      txtArea = new JTextArea("HEllo");
      NestedListener mylistener = new NestedListener();  //creating a listener
      btnOK.addActionListener(mylistener);    // adding the listener to the button
      add(btnOK);
      add(txtArea);
   }
   NestedListener implements ActionListener{    //Nested listener class
                                                //which means it is within 
                                                //the curly brackets of the 
                                                 //first class           
     public void actionPerformed(ActionEvent evt){

          String text = txtArea.getText();    //txtArea is directly accessible here
          txtArea.setText(text + " Again");
     }

  }

}