JFrame BorderLayout东西南北中事件监听输出文本域

75 篇文章 2 订阅

JFrame 东西南北中事件监听输出文本域

题目

点击某个按钮,在文本框中显示对应的文字。

在这里插入图片描述

解题
效果图

在这里插入图片描述

源代码
主类
public class JFDTest {
    public static void main(String args[]) {

        MyJFrame myJFrame = new MyJFrame("我...", 100, 100, 200, 200);

// 创建上半部分panel1玻璃窗,存放文本域
        Panel panel1 = new Panel(new FlowLayout());
        JTextArea textArea = new JTextArea(1, 10);
        panel1.add(new JScrollPane(textArea));

// 创建上半部分panel1玻璃窗,存放五个按钮
        Panel panel2 = new Panel(new BorderLayout());
//分别独立创建 东西南北中 五个按钮,以便后续监听使用
        JButton button_north = new JButton("北");
        panel2.add(button_north, BorderLayout.NORTH);
        JButton button_south = new JButton("南");
        panel2.add(button_south, BorderLayout.SOUTH);
        JButton button_east = new JButton("东");
        panel2.add(button_east, BorderLayout.EAST);
        JButton button_west = new JButton("西");
        panel2.add(button_west, BorderLayout.WEST);
        JButton button_center = new JButton("中");
        panel2.add(button_center, BorderLayout.CENTER);

        JButtonHandler listener = new JButtonHandler();
//创建监听事件,listener实例,以及连接文本域
        listener.setJTextArea(textArea);
//监听各按钮
        button_north.addActionListener(listener);
        button_south.addActionListener(listener);
        button_east.addActionListener(listener);
        button_west.addActionListener(listener);
        button_center.addActionListener(listener);
        
        //将两个玻璃窗放入容器窗格,构造完成
        myJFrame.add(panel1);
        myJFrame.add(panel2);
        myJFrame.setVisible(true);
    }
}
MyJFrame框架类
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

class MyJFrame extends JFrame {
    MyJFrame(String s, int x, int y, int w, int h) {
        setLayout(new FlowLayout());
        setTitle(s);
        setBounds(x, y, w, h);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
JButtonHandler事件监听类
class JButtonHandler implements ActionListener {
    JTextArea textshow;

    public void setJTextArea(JTextArea area) {
        textshow = area;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
//e.getActionCommand()得到button按钮上的字符串
		textshow.setText("");
        switch (e.getActionCommand()) {
            case "北":
                textshow.append("北");
                break;
            case "南":
                textshow.append("南");
                break;
            case "东":
                textshow.append("东");
                break;
            case "西":
                textshow.append("西");
                break;
            case "中":
                textshow.append("中");
                break;
            default:
                textshow.append("请重新点击");
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在窗口绑定的键盘事件监听器调用方法,方法里的文本域不起作用,可能有以下几个原因: 1. 你在监听器方法中访问的文本域对象不是你想要的那个。如果你在监听器方法中创建了新的文本域对象,那么它实际上是一个新对象,而不是窗口中的那个文本域。为了访问窗口中的文本域,你需要将其定义为类成员变量,并在监听器方法中使用它。例如: ```java public class MyWindow extends JFrame { private JTextField textField; public MyWindow() { textField = new JTextField(); addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { handleKeyEvent(e); } }); } private void handleKeyEvent(KeyEvent e) { // 使用类成员变量 textField textField.setText("Key pressed: " + e.getKeyChar()); } } ``` 2. 你在监听器方法中访问的文本域对象没有被正确地创建和添加到窗口中。请确保你已经正确地创建了文本域对象,并将其添加到了窗口中。你可以尝试在监听器方法中打印文本域对象的引用,以确定它是否为 null 或者不正确地创建和添加到窗口中。 3. 你在监听器方法中访问的文本域对象被其他组件所遮挡。在 Swing 中,组件的绘制顺序是由它们被添加到窗口中的顺序决定的。如果你的文本域被其他组件遮挡,那么你可能无法看到它的更新。你可以尝试将文本域放置在其他组件之前,或者使用 setComponentZOrder 方法来改变它们的绘制顺序。 希望这些提示能够帮助你解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK Primin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值