Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅删除文本区域中的选定文本_Java_User Interface_Swing - Fatal编程技术网

Java 仅删除文本区域中的选定文本

Java 仅删除文本区域中的选定文本,java,user-interface,swing,Java,User Interface,Swing,我想使用JavaSwing删除文本区域中选定的文本,但找不到方法。在某个时候,我想到了使用textArea.setText(“”)但是,当我这样做时,它会清除所有内容。谁能帮我一下吗 这是我到目前为止写的代码 public class DeleteTest extends JFrame implements ActionListener { JPanel panel; JTextArea textArea; JButton button; public DeleteTest() {

我想使用JavaSwing删除文本区域中选定的文本,但找不到方法。在某个时候,我想到了使用
textArea.setText(“”)但是,当我这样做时,它会清除所有内容。谁能帮我一下吗

这是我到目前为止写的代码

public class DeleteTest extends JFrame implements ActionListener {

JPanel panel;
JTextArea textArea;
JButton button;

public DeleteTest() {

    setVisible(true);
    setSize(500, 500);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    panel = new JPanel();
    panel.setBackground(getBackground().BLACK);
    textArea = new JTextArea(300, 300);
    button = new JButton("clear");

    button.addActionListener(this);

    panel.add(button);

    add(textArea, BorderLayout.CENTER);
    add(panel, BorderLayout.SOUTH);

}

@Override
public void actionPerformed(ActionEvent arg0) {
    if (arg0.getSource()==button){
        String selected=textArea.getSelectedText();
        if(!selected.equals("")){


        }
    }

}

public static void main(String[] args) {
    Runnable r = new Runnable() {

        @Override
        public void run() {
            DeleteTest de = new DeleteTest();

        }
    };

    SwingUtilities.invokeLater(r);

}

}

如果只想删除选定的文本,请尝试以下操作:

textArea.setText(textArea.getText().replace(textarea.getSelectedText(),""));
希望这有帮助

txtArea.replaceSelection("");

这应该更短更有效。

对于JavaFx TextArea您可以使用删除文本(IndexRange range)方法删除所选文本

textArea.deleteText(textArea.getSelection());
要根据索引删除文本,请使用删除文本(int-start,int-end)重载方法

textArea.deleteText(startIndex,endIndex);

我们可以使用replaceSelection(字符串替换)方法删除文本,实际上,deleteText在内部使用了replaceText方法,但是deleteText方法将提高代码的可读性。

但是如果所选文本的一个版本在文本区域中出现多次,则此操作将失败。@George:是的。但这可以通过更多的努力来解决。根据我的观点,我认为OP没有这种情况。-1,是的,这可能会起作用,但是这个解决方案没有显示出对Swing如何工作的理解,因此不是一个很好的解决方案。使用setText(…)方法代价高昂,需要解析整个文本并重新创建文档。这是一个“字符串”解决方案,而不是一个“文本组件”解决方案。+1,是为Swing文本组件设计的更好的解决方案。非常甜蜜和聪明!