3

誰かが私にちょっとしたアドバイスをくれることを願っています。私はJavaに本当に慣れておらず(1〜2週間)、チュートリアルを使用してこれを達成していますが、(単純な)タスクを実行することはできません。

GUIで[送信]ボタンをクリックすると、JTextFieldに入力したGUIのJTextAreaにテキストを設定/テキストを追加する必要があります。私は以下に私のコードを提供したので、誰かが私が間違っていた場所に私を導くことができます。

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

誰かが私を少し助けてくれたら大歓迎です。

すべてのボタンなどがメイン内にあるため、アクションが「送信」をボタンとして認識できないためだと思います...しかし、メインメソッドの外にGUIを書き込むと、コンパイルされません。私は新しいです。これにしかし私は学んでいます。小さな手が必要です。

4

1 に答える 1

1

Javaへようこそ。あなたはあなたのコードでそこに到達していますが、いくつかの小さな問題があります。

最初の問題は「e」を取り巻くものです。eと呼ばれるものが2つあります。1つはクラスで、もう1つはオブジェクトを参照する変数です。

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

これで、オブジェクト参照に値を指定しないため、nullになります。UIのイベントに応答するオブジェクトであるActionListenersの場合、これはお勧めできません。イベントに応答するには、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」はクラスにとって非常に悪い名前です。常にクラス名をわかりやすくします。

2番目の問題は古典的なもので、Javaを使い始めると誰もがこの問題を抱えています。問題は、静的な使用を取り巻くものです。これは大きな主題であるため、詳細には触れませんが、基本的に静的と宣言されたメソッド(main(...)など)からは、静的としてマークされたクラスで宣言された変数にのみアクセスできます。静的変数の場合、実際の変数は1つだけです。非静的変数の場合、クラスのインスタンスごとに1つの変数があります。

基本的に、テストプログラムでは、すべてを静的にするか(現在「e」と呼ばれるクラスを含む)、FirstJavaGuiのインスタンスを作成してから、非静的を使用するかを選択できます。

于 2012-06-07T21:08:55.097 に答える