3

希望有人能给我一点建议。我对 Java 真的很陌生(1-2 周),并且一直在使用教程来做到这一点,但我尝试的任何方法都不能让我做一个(简单的)任务。

当我单击 GUI 中的发送按钮时,我希望它在我的 GUI 上的 JTextArea 中设置文本/添加文本,我在 JTextField 中输入了该文本。我在下面提供了我的代码,以便有人可以指导我出错的地方。

package firstjavagui;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class FirstJavaGui extends JPanel implements ActionListener {
    private static ActionListener e;
    protected JTextField tf;
    protected JTextArea ta;
    protected JButton send;
    private final static String newL = "\n";

    public FirstJavaGui() {
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public class e implements ActionListener {  
        @Override
        public void actionPerformed(ActionEvent e) { 
            String text = tf.getText();

            if (send.isSelected()) {
                ta.setText(text + newL);
            }    
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Thomas' first application");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(575,300);

        JMenuBar mb = new JMenuBar();

        JMenu m1 = new JMenu("File");
        JMenu m2 = new JMenu("Help");

        mb.add(m1);
        mb.add(m2);

        JMenuItem m21 = new JMenuItem("Save");
        JMenuItem m22 = new JMenuItem("Exit");

        m1.add(m21);
        m1.add(m22);

        JButton send = new JButton("Send");

        JButton reset = new JButton("Start/Restart");

        JLabel enter = new JLabel("Enter text here:");

        JTextField text = new JTextField(25);

        JPanel p = new JPanel();
        p.add(enter);
        p.add(text);
        p.add(send);
        p.add(reset);

        JTextArea ta = new JTextArea();

        frame.getContentPane().add(BorderLayout.SOUTH,p);
        frame.getContentPane().add(BorderLayout.NORTH, mb);
        frame.getContentPane().add(BorderLayout.CENTER, ta);

        send.addActionListener(e);

        frame.setVisible(true);
    }
}

如果有人可以帮助我,将不胜感激。

我认为这是因为我的所有按钮等都在我的 main 中,所以我的操作无法将“发送”识别为按钮......但是如果我在 main 方法之外编写我的 gui,它不会编译..我是新手对此,但我正在学习。只需要一只小手。

4

1 回答 1

1

欢迎来到 Java。您正在使用您的代码到达那里,但有一些小问题。

第一个问题围绕“e”。你有两个叫做 e 的东西,一个是一个类,一个是一个引用对象的变量:

// Reference to an object
private static ActionListener e;
...
// Class
public class e implements ActionListener{
...

现在你永远不会给你的对象引用一个值,所以它会是空的。对于 ActionListeners(响应 UI 中的事件的对象)来说,这不是一个好主意。您需要创建一个实现 ActionListener 的类的实例以响应事件。这是一个典型的例子:

...
ExitListener listener = new ExitListener();
button.addActionListener(listener)
...
private class ExitListener implements ActionListener {
    @Override
    public void actionPerformed (ActionEvent e) {
        System.exit(0);
    }
}

ExitListener 是一个 ActionListener。为了响应事件,您需要创建一个 ExitListener 实例并将该实例传递给按钮。顺便说一句,“e”对于一个类来说是一个非常糟糕的名字——总是让你的类名具有描述性。

第二个问题很经典,每个人在开始使用Java时都会遇到这个问题。问题围绕着静态的使用。我不会详细介绍,因为它是一个大主题,但基本上从声明为静态的方法(例如 main(...))中,您只能访问在类中声明的也标记为静态的变量。对于静态变量,只有一个实际变量。对于非静态变量,类的每个实例都有一个变量。

基本上,对于您的测试程序,您可以选择将所有内容设为静态(包括当前称为“e”的类),或者您可以创建 FirstJavaGui 的实例,然后您可以使用非静态。

于 2012-06-07T21:08:55.097 回答