为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2022-12-21 15:09:29
嘿,我想要一个 JFrame,它必须包含按钮“LeftButton”和“RightButton”以及一个 JTextArea。在我按下两者之一之后,我希望 JTextArea 在新的一行中写入哪些按钮已被按下。为了做到这一点,我想使用一个 MyActionListener 类,并引用 JTextArea,它实现了 Actionlistener。我试图为 ActionPerformed 提供 JTextArea 并意识到我必须自己创建 Setters。然后我意识到 MyActionListener 类还需要一个像 JTextArea 这样的对象,它与 JFrame 类中的相同。然后我发现我还必须更新 JFrame 类中的 JTextArea,现在我有点卡住了。我试图将 Setters 放入 JFrame 类并从 MyActionListener 调用它们但没有成功,我尝试做类似的事情A_18_c.south = southpackage 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 已被按下,但按下后没有任何反应。没有错误弹出。
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

我试着在 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);

    }

}

}



查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信