如何在java应用程序中为textfield编写退格代码?

如何在java应用程序中为textfield编写退格代码?,java,swing,Java,Swing,这是我的简单按钮,我必须编写代码使其成为退格按钮 JButton btnBackspace = new JButton("B"); btnBackspace.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { } } });

这是我的简单按钮,我必须编写代码使其成为退格按钮

        JButton btnBackspace = new JButton("B");
        btnBackspace.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {

                }
            }
        });
        btnBackspace.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnBackspace.setForeground(Color.BLACK);
        Image btBack = new 
        ImageIcon(this.getClass().getResource("/b.png")).getImage();
        btnBackspace.setIcon(new ImageIcon(btBack));
        btnBackspace.setBounds(121, 145, 97, 63);
        frame.getContentPane().add(btnBackspace);;

这是将从指定的文本字段中删除文本的退格按钮的示例代码 此处->首先根据文本的长度将文本保存到backspace变量中-执行1以删除文本,然后再次将文本分配给基本textfeild

JButton btnBackspace = new JButton("\uF0E7");
        btnBackspace.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String backspace = null;
                if(txtResult.getText().length()>0) {
                    StringBuilder strBuilder = new StringBuilder(txtResult.getText());
                    strBuilder.deleteCharAt(txtResult.getText().length()-1);
                    backspace = strBuilder.toString();
                    txtResult.setText(backspace);
                }
            }
        });
        btnBackspace.setFont(new Font("Wingdings", Font.BOLD, 22));
        btnBackspace.setForeground(Color.BLACK);
        Image btBack = new ImageIcon(this.getClass().getResource("/b.png")).getImage();
        btnBackspace.setIcon(new ImageIcon(btBack));
        btnBackspace.setBounds(121, 145, 97, 63);
        frame.getContentPane().add(btnBackspace);

文本组件使用
文档
保存数据。使用
insertString(…)
remove(…)
方法对文档进行更改

如果要从特定文本字段中删除文本,则可以使用:

JButton button = new JButton("Back Space");
button.addActionListener((e) ->
{
    try
    {
        int offset = textField.getCaretPosition();
        Document doc = textField.getDocument();
        doc.remove(offset - 1, 1);
    }
    catch(BadLocationException ble) {}
});
或者您可以编写一个通用侦听器。以下示例将从单击按钮之前具有焦点的最后一个文本组件中删除文本:

Action backSpace = new TextAction("Back Space")
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        try
        {
            JTextComponent component = getFocusedComponent();
            int offset = component.getCaretPosition();
            Document doc = component.getDocument();
            doc.remove(offset-1, 1);
        }
        catch(BadLocationException ble) {}
    }
};

JButton button = new JButton(backSpace);
(1-)这只会删除文本字段末尾的文本。2) 不要使用setText(…)删除字符。这将为文本字段生成不正确的事件。Swing文本组件使用文档来包含文本。应通过文档对文本进行更新。