如何在Java中连接来自不同类的按钮(Button)和文本区域(Text Area)。

huangapple go评论107阅读模式
英文:

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

问题

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

以上为你提供的代码的翻译部分。

英文:

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

答案1

得分: 1

因为你在 public ToolBar(JTextArea frame) 构造函数中调用了 Button1.addActionListener,所以你应该调用这个构造函数来执行其中的代码。但是你却调用了 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 命名约定 并始终使用它。你可能认为这不重要,但我保证它会避免你犯愚蠢的错误,并节省你修复错误的时间。

英文:

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.

huangapple
  • 本文由 发表于 2020年9月5日 14:44:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/63751190.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定