Vinit ...
Vinit ...

Reputation: 1459

Java: Not able to print on TextArea from other class

I have one frame in which one TestArea is there. When I append some string from this class then String is appended but when I want to append String from other class then String is not appended. I created one method to append string in TextArea, when I call this method in this class then string is appended on text Area. But when I call this method from other Class then String is not appended on TextArea.

Code (MainClass):

public class MainClass {
private JFrame frame;
private TextArea textArea;
private Font font;
private JButton button1;
private JButton button2;
private SecondClass secondClass;

public MainClass() {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        frame = new JFrame("XXX");
        frame.setBounds(200, 200, 600, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        button1 = new JButton("Button1");
        font = new Font("Arial", Font.BOLD, 13);
        button1.setFont(font);
        button1.setBounds(4, 4, 289, 30);

        button2 = new JButton("Button2");
        button2.setFont(font);
        button2.setBounds(300, 4, 289, 30);

        font = null;

        textArea = new TextArea();
        textArea.setBounds(4, 38, 585, 322);
        textArea.setEnabled(true);

        font = new Font("Arial", Font.PLAIN, 13);
        textArea.setFont(font);

        frame.add(button1);
        frame.add(button2);
        frame.add(textArea);

        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                textArea.append("*** I am in actionPerformed() ***\n");
                appendToTextArea("Call from actionPerformed() method\n");
            }
        });

        button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                secondClass = new SecondClass();
                secondClass.printOnTextArea();
            }
        });

    } catch (Exception e) {
        textArea.append(e.toString());
    }
}

public void appendToTextArea(String str) {
    System.out.println(str+"\n");

    textArea.append(str+"\n"); //this line not work when I call this method from other class
}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            MainClass window = new MainClass();
            window.frame.setVisible(true);
        }
    });
}

}

Code(SecondClass):

import com.grissserver.MainClass;

public class SecondClass extends MainClass{
void printOnTextArea() {
    System.out.println("*** printOnTextArea() ***");
    super.appendToTextArea("call from Second Class in printOnTextArea()");
}
}

Please give some Idea, why this is not working.

Upvotes: 2

Views: 2727

Answers (2)

shan
shan

Reputation: 1202

The SecondClass has its own textArea. So you may need to pass MainClass's textArea to SecondClass.

public class SecondClass {
    private TextArea tArea;
    SecondClass(TextArea ta) {
        tArea = ta;
    }
    void printOnTextArea() {
        System.out.println("*** printOnTextArea() ***");
        tArea.append("call from Second Class in printOnTextArea()");
    }
}

You should change your MainClass like this.

....
button2.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent arg0) {
        secondClass = new SecondClass(textArea);
        secondClass.printOnTextArea();
    }
});
....

hope this helps...

Upvotes: 3

hage
hage

Reputation: 6163

I think the problem is that the way you try to paint to the text area is wrong.

In your action method you create a new object of SecondClass which extends MainClass. This means this object has its own textarea object. But this new object (frame) is not displayed, because you only call setVisibile in MainClass#main, and hence you cannot see the displayed text!

In short: There are two different text areas! And one of them is not visible

Upvotes: 4

Related Questions