swing—如何连接java中不同类的按钮和文本区域

iyfamqjs  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(394)

我想做一个窗口,当你按下按钮时,它会在文本区显示不同语言的短语“我爱你”。我只是不知道如何连接按钮中的文本区域。我有三节课。我尝试了很多我可以思考的方法,我也搜索了与此相关的东西,但我找不到任何有用的

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

        });
    }
}
3vpjnl9f

3vpjnl9f1#

既然你打电话来 Button1.addActionListenerpublic ToolBar(JTextArea frame) 构造函数,您应该调用此构造函数来调用其中的代码。但是你却在召唤 public ToolBar() 建造师。
要解决此问题,请执行以下操作:

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

你应该写:

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

而且在 ToolBar 修复构造函数,而不是:

public ToolBar() {
       // ... STUFF 1 ...
    }

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

你应该写:

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

public ToolBar() {
       // ... STUFF 1 ...
    }

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

请学习java命名约定并一直使用它。你可能不认为这很重要,但我保证这会让你避免犯愚蠢的错误,也会让你节省时间去改正错误。

相关问题