【问题标题】:when enter is hit add string to the end of the line当输入被击中时,将字符串添加到行尾
【发布时间】:2020-09-30 13:21:06
【问题描述】:

在我下面的 java 代码中,它会生成一个带有 jtextrea 的框架。这允许简单的文本处理。我想要做的就是添加“Sam”。最后是 sam 的 5 个空格。每次用户点击进入。您还可以看到我在下面添加的 gif,这正是我正在寻找的。​​p>

import java.awt.event.*; 
import java.awt.*; 
import javax.swing.*; 
class text11 extends JFrame implements ActionListener { 



    // JFrame 
    static JFrame f; 



    // text area 
    static JTextArea jt; 

    // main class 
    public static void main(String[] args) 
    { 
        // create a new frame to store text field and button 
        f = new JFrame("textfield"); 

        // create a label to display text 




        // create a object of the text class 
        text11 te = new text11(); 



        // create a text area, specifying the rows and columns 
        jt = new JTextArea(" ", 20, 20); 

        JPanel p = new JPanel(); 

        // add the text area and button to panel 
        p.add(jt); 

        f.add(p); 
        // set the size of frame 
        f.setSize(300, 300); 

        f.show(); 
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    } 

} 

【问题讨论】:

    标签: java swing return append jtextarea


    【解决方案1】:
        String actionKey = "ADD_SAM";
        InputMap inputMap = jt.getInputMap(JComponent.WHEN_FOCUSED);
        KeyStroke enterPressed = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
        inputMap.put(enterPressed, actionKey);
        jt.getActionMap().put(actionKey, new TextAction(actionKey) {
            @Override
            public void actionPerformed(ActionEvent e) {
                jt.append(" Sam\n");
            }
        });
    

    【讨论】:

    • (1+) 使用键绑定和 append() 方法是更好的解决方案。
    【解决方案2】:

    要获得输入以便知道用户何时输入,您必须创建自己的KeyListener 类。如果您不知道如何使用它,可以使用以下文档中的方便链接:https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html。

    但简单地说,KeyListener 是一个接口,您必须在其中指定一些方法,但在您的情况下,我认为您唯一需要的是keyPressed(KeyEvent e)(称为按下)。如果您对其他人感兴趣,keyReleased(KeyEvent e) 是一个键被释放的时候,keyType(KeyEvent e) 是它被快速按下和释放的时候。然后,使用JFramesaddKeyListener(KeyListener k) 添加您的自定义动作监听器。

    完成之后,您可以使用JTextArea 的setText() 和getText() 方法将“sam”附加到末尾(5 个空格被堆栈溢出截断,我知道你想要5 个空格) .

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
            jt.setText(jt.getText() + "     sam");
        }
    }
    

    如果你正确添加了KeyListener,你应该没问题!

    【讨论】:

    • 永远不要将 KeyListener 与文本组件一起使用。曾经。如果您需要监听文本组件(例如,JTextarea)中的按键,请使用 Key Bindings,这是 Swing 处理这些组件中按键的方式。更好的是,在通过 DocumentListener 放置之后或在放置期间通过 DocumentFilter 监听组件的 Document 中的变化。
    • 您也不会使用 getText() 和 setText()。那是没有效率的。 getText() 方法必须解析 Document 以创建字符串,然后 setText() 方法必须解析字符串以将文本添加回 Document。相反,您将使用 append() 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2016-08-29
    • 1970-01-01
    • 2015-12-16
    • 2017-10-08
    • 2012-08-03
    • 2017-11-29
    相关资源
    最近更新 更多