第二课:
@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中都没有显示。
答案 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");
}
}
}