Jocriaus
Jocriaus

Reputation: 1

How to Connect the Button and a Text Area from different Classes in Java

I want to make a window that when you press the buttons it will show the phrase "I Love You" in different language in the text area. I Just don't know how to connect the text area in the buttons. I have three classes. I tried many ways I could think and I also search the things related to this but I can't find any useful

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class MainClass {

    public static void main(String[] args) {
        
        SwingUtilities.invokeLater(new Runnable() {
        public void run()   {
                new MainFrame();
        }
    });
}
}

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class MainFrame extends JFrame  {
            
    private ToolBar Tulbar = new ToolBar();
    private JTextArea textArea = new JTextArea();
    
    public MainFrame() {
        super("This window loves you");
        
        setLayout(new BorderLayout());
        add(Tulbar, BorderLayout.NORTH);
        
        add(new JScrollPane(textArea), BorderLayout.CENTER);
        
        setSize(600,600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);   
    }
}

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;


public class ToolBar extends JPanel{

    private JButton Button1 = new JButton("Korean");
    private JButton Button2 = new JButton("Japanese");
    private JButton Button3 = new JButton("French");
    private JButton Button4 = new JButton("Italian");
    private JButton Button5 = new JButton("English");
    private JButton Button6 = new JButton("Tagalog");
    
    public ToolBar() {
        setLayout(new FlowLayout(FlowLayout.LEFT));
        //added buttons

        add(Button1);
        add(Button2);
        add(Button3);
        add(Button4);
        add(Button5);
        add(Button6);
        
    }
    
    public ToolBar(JTextArea frame) {
        
        Button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.append("Saranghae");
            }
            
        });
        

        Button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.append("Aishiteru");
            }
            
        });
        
        Button3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.append("Je t\'aime");
            }
            
        });

        Button4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.append("Ti\'amo");
            }
            
        });

        Button5.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.append("I Love You");
            }
            
        });

        Button4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.append("Mahal Kita");
            }
            
        });
    }
}

Upvotes: 0

Views: 603

Answers (1)

TeWu
TeWu

Reputation: 6564

Since you are calling Button1.addActionListener in public ToolBar(JTextArea frame) constructor, you should invoke this constructor to invoke the code in it. But instead you are invoking public ToolBar() constructor.

To fix this instead of:

    private ToolBar Tulbar = new ToolBar();
    private JTextArea textArea = new JTextArea();

you should write:

    private JTextArea textArea = new JTextArea();
    private ToolBar Tulbar = new ToolBar(textArea);

and in ToolBar fix the constructors, instead of:

    public ToolBar() {
       // ... STUFF 1 ...
    }
    
    public ToolBar(JTextArea frame) {
        // ... STUFF 2 ...
    }

you should write:

    public ToolBar(JTextArea frame) {
        // ... STUFF 1 ...
        // ... STUFF 2 ...
    }

or

    public ToolBar() {
       // ... STUFF 1 ...
    }
    
    public ToolBar(JTextArea frame) {
        this();
        // ... STUFF 2 ...
    }

Please learn Java Naming Conventions and use it all the time. You probably don't think it's important, but I promise it will save you from making stupid mistakes, and will save your time fixing them.

Upvotes: 1

Related Questions