猿问

按下按钮后如何使用自己的 ActionListener 类将文本附加到 JTextArea

嘿,我想要一个 JFrame,它必须包含按钮“LeftButton”和“RightButton”以及一个 JTextArea。在我按下两者之一之后,我希望 JTextArea 在新的一行中写入哪些按钮已被按下。为了做到这一点,我想使用一个 MyActionListener 类,并引用 JTextArea,它实现了 Actionlistener。


我试图为 ActionPerformed 提供 JTextArea 并意识到我必须自己创建 Setters。然后我意识到 MyActionListener 类还需要一个像 JTextArea 这样的对象,它与 JFrame 类中的相同。然后我发现我还必须更新 JFrame 类中的 JTextArea,现在我有点卡住了。我试图将 Setters 放入 JFrame 类并从 MyActionListener 调用它们但没有成功,我尝试做类似的事情A_18_c.south = south


package Aufgabe_18;


import javax.swing.*;

import java.awt.*;


public class A_18_c extends JFrame {

    private Button LeftButton;

    private Button RightButton;

    private JScrollPane scroll;

    private JTextArea south;

    private MyActionListener MAL;


    public static void main(String[] args) {

        A_18_c l = new A_18_c("Aufgabe18c");

    }



    public A_18_c(String title) {

        super(title);

        setSize(300, 150);

        this.setLocation(300, 300);

        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        MAL = new MyActionListener(south);


        south = new JTextArea(5, 20);

        south.setEditable(false);

        JScrollPane sroll = new JScrollPane(south);

        this.add(sroll, BorderLayout.SOUTH);


        LeftButton = new Button("Left Button");

        LeftButton.setOpaque(true);

        LeftButton.addActionListener(MAL);

        this.add(LeftButton, BorderLayout.WEST);


        RightButton = new Button("Right Button");

        RightButton.setOpaque(true);

        RightButton.addActionListener(MAL);

        this.add(RightButton, BorderLayout.EAST);


        setVisible(true);

    }

}

我的动作监听器:


package Aufgabe_18;


import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



我希望 JTextArea 写下哪个 Button 已被按下,但按下后没有任何反应。没有错误弹出。


饮歌长啸
浏览 86回答 1
1回答

慕容森

我试着在 JDK8 上编译你的代码,它给出了错误,我可以看到它几乎没有问题。首先是:MAL = new MyActionListener(south);south = new JTextArea(5, 20);south.setEditable(false);您将 Null 作为参数传递给您的侦听器。在将构造函数中的“south”传递给 MAL 之前,您必须先对其进行初始化。此外,Button 没有任何方法作为 getString。它具有用于 JButton 的 getLabel 或 getText。同样正如@vince 所说,在“LeftButton”中添加空格。我对你的代码做了一些调整。下面是工作代码。为简单起见,我在同一个文件中添加了自定义监听器,并将 Button 替换为 JButton(您已经在使用 swing 的 JFrame,因此最好尝试使用所有 swing 组件)。你会得到这个的要点:import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.*;public class Test extends JFrame {    private JButton LeftButton;    private JButton RightButton;    private JScrollPane scroll;    private JTextArea south;    private MyActionListener MAL;    public static void main(String[] args) {        Test l = new Test("Aufgabe18c");    }    public Test(String title) {        super(title);        setSize(300, 150);        this.setLocation(300, 300);        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);        //initialize south        south = new JTextArea(5, 20);        south.setEditable(true);        //pass it to your Listener        MAL = new MyActionListener(south);        JScrollPane scroll = new JScrollPane(south);        this.add(scroll, BorderLayout.SOUTH);        LeftButton = new JButton("Left Button");        LeftButton.setOpaque(true);        LeftButton.addActionListener(MAL);        this.add(LeftButton, BorderLayout.WEST);        RightButton = new JButton("Right Button");        RightButton.setOpaque(true);        RightButton.addActionListener(MAL);        this.add(RightButton, BorderLayout.EAST);        setVisible(true);    }public class MyActionListener implements ActionListener{    private final JTextArea south;    public MyActionListener(JTextArea south)    {        this.south = south;    }    private void setTextLeftButton(JTextArea south){        south.append("Left Button \n");    }    private void setTextRightButton(JTextArea south){        south.append("Right Button \n");    }@Override        public void actionPerformed(ActionEvent e) {        String a;        Object src = e.getSource();        JButton b = null;        b = (JButton) src;        a = b.getText();        if (a == "Left Button")            setTextLeftButton(south);        else            setTextRightButton(south);    }}}
随时随地看视频慕课网APP

相关分类

Java
我要回答