Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何在按下按钮后使用自己的ActionListener类将文本追加到JTextArea

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

Stack Overflow用户
提问于 2019-05-28 16:11:57
回答 1查看 128关注 0票数 0

嘿,我想要一个有"LeftButton“和"RightButton”按钮的JFrame和一个JTextArea。在我按下两个按钮中的一个后,我想让JTextArea在新的一行中写下已按下的按钮。为了做到这一点,我想使用一个引用到JTextArea的MyActionListener类,它实现了动作侦听器。

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

代码语言:javascript
代码运行次数:0
复制
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);
    }
}

MyActionListener:

代码语言:javascript
代码运行次数:0
复制
package Aufgabe_18;

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

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();
        Button b = null;
        b = (Button) src;
        a = b.getString();
        if (a == "LeftButton")
            setTextRightButton(south);
        if (a == "RightButton")
            setTextRightButton(south);
    }
}

我希望JTextArea会写出按下了哪个按钮,但按下后什么也不会发生。未弹出错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 16:40:42

我试着在JDK8上编译你的代码,它给出了错误,我可以看到它几乎没有问题。

首先,这是:

代码语言:javascript
代码运行次数:0
复制
MAL = new MyActionListener(south);

south = new JTextArea(5, 20);
south.setEditable(false);

您正在将Null作为参数传递给侦听器。在将"south“传递给MAL构造函数之前,必须先初始化”south“。另外,Button没有任何作为getString的方法。它有用于JButton的getLabel或getText。同样,正如@vince所说,在"LeftButton“中添加空格。我对你的代码做了一些调整。下面是工作代码。为简单起见,我在同一文件中添加了自定义侦听器,并用JButton替换了Button (您已经在使用swing的JFrame,所以最好尝试使用所有swing组件)。您将通过以下内容获得要点:

代码语言:javascript
代码运行次数:0
复制
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);
    }
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56346290

复制
相关文章
iOS开发过程中的奇淫技巧记录
为了修改带分组tableview的section header跟随置顶的问题,网上的奇淫技巧比方通过修改scroller的回调方法,体验不好,正规的方法是修改为tableView的UITableViewStyleGrouped模式,但该模式下列表section Header的高度过高,需要设置一个footer的高度:
呱牛笔记
2023/05/02
6060
iOS开发过程中的奇淫技巧记录
UITextView字数限制
经常做,经常忘,记下来,以后好直接拷贝。 开始使用如下方法做限制 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@""] && range.length > 0) { //删除字符肯定是安全的 return YES; }
王大锤
2018/07/04
2.7K0
UITextView Link 颜色
UITextView 设置 NSAttributedString.Key.foregroundColor : UIColor.qvmedi_color(withHEX: 0x304EFF) 不起作用 新增 textView.linkTextAttributes = [:] textView.attributedText = attrStr
developerbfl
2021/04/19
1.9K0
如何隐藏tableHeaderView或tableFooterView
在项目中,因为同一页面结构体不同,头部是相同的结构,用了两个不同的tableView,头部是统一的view,但是发现tableView.tableHeaderView=_headerView只赋值一次,不支持来回赋值,打印出 NSLog(@"%@",_headerView.superview)仍然是上一个tableview视图。
honey缘木鱼
2019/11/04
1.1K0
UITextView字数限制
经常做,经常忘,记下来,以后好直接拷贝。 开始使用如下方法做限制 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@""] && range.length > 0) { //删除字符肯定是安全的 return YES; }
王大锤
2018/05/17
2.4K0
自定义UITextView
自定义UITextView,带有placeholeder,可以设置placeholeder文字的大小和颜色。
hrscy
2018/08/30
5770
自定义UITextView
iOS中UITextView方法解读 原
@property(nonatomic,assign) id<UITextViewDelegate> delegate;
珲少
2018/08/16
9720
设置UITextView的行间距
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53261917
用户1451823
2018/09/13
2K0
UITextView 手势触发 TouchesBegan 函数
前几天做了个手势可以改变文章字体大小的功能。开始,在当前view中添加一个UITextView ,然后添加- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event函数,可怎么也触发不了,在网上找了些资料,说得也不是很清楚,今天把它总结下。
全栈程序员站长
2022/09/16
1.3K0
改变UITextView的边框颜色
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/51086444
用户1451823
2018/09/13
2.1K0
iOS 10 ~ iOS 15 tableview 适配(使用注意事项)
参考:https://www.jianshu.com/p/b42030a37953 https://blog.csdn.net/weixin_34037977/article/details/91634236
清墨
2022/11/12
2.1K0
iOS 10 ~ iOS 15 tableview 适配(使用注意事项)
【IOS开发基础系列】UITextView专题
frame.size.height = self.serTextView.contentSize.height;
江中散人_Jun
2023/10/16
4430
【IOS开发基础系列】UITextView专题
iOS - 解决tableHeaderView添加searchBar后出现的问题
无语了,遇到这个问题,虽然解决了,但接下来还是得好好找找问题的原因所在~~ 问题重现 未修改前的代码 self.tableView.tableHeaderView = self.searchCon
LinXunFeng
2018/06/29
9600
[iOS] 输入框高度随输入内容变化
对于第一点,有一个方便的计算方法,就是获取UITextView内容的高度比上UITextView的字体的高度,即可得到当前的行数。
wOw
2018/09/18
2.5K0
自定义UIPageControl、UITextView占位视图
一言不合先上效果图: ①、自定义的UIPageControl是继承于UIView,封装好的,可以设置图标大小,形状,图片 ,颜色,间隔,当然,需要的话,也可以自定义图标视图;详情请按快捷键Ctrl +
且行且珍惜_iOS
2018/05/22
8610
UITextView自动滚动的解决方案
思路:UIView加载完成3后,用NSTimer结合setContentOffset将UITextView向下滚动1像素。在滚动到底部的时候停止NSTimer。每当手动滚动UITextView前销毁NSTimer,滚动后重新创建NSTimer。 NSTimer *timer; - (void)viewDidLoad { [self performSelector:@selector(resetText) withObject:nil afterDelay:3.0f]; } - (void)resetTe
用户1172164
2018/01/16
1.5K0
刹车盘固有频率检测系统
汽车刹车系统是由刹车盘 (disc)、卡钳 (bracket)、来令片 (pad)、以及托架 (bracket) 所组成。当这些刹车系统部件的固有频率因设计不良或制造不良而导致耦合时,就会在刹车时,因摩擦行为产生的激振力传入系统,而产生共振行为,进而导致刹车异音的发生。
SHOUT
2022/05/31
6250
刹车盘固有频率检测系统
iOS开发中利用runtime设置UITextView的默认文字
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/75258532
用户1451823
2018/09/13
6270
iOS-UITableView 之 tableHeaderView 遮挡后面 cell 的问题
1. 理想状态下的 tableHeaderView(见下图): 理想状态下的tableView.png 2. 但是有时候会出现这种情况(见下图): tableHeaderView遮挡住cel
用户1890628
2018/05/10
3.2K0
点击加载更多

相似问题

SwiftUI ScrollView中包装的非滚动UITextView的固有高度

13

动态设置tableHeaderView高度

105

tableHeaderView中的UITextView找不到委托

11

tableHeaderView的高度似乎为0

11

iOS 7无法更改TableHeaderView的高度

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档