Удалить строку из JTextArea

У меня есть JTextArea это заполнено числами без дубликатов. Есть кнопка добавления и удаления. Я запрограммировал кнопку добавления, но я борюсь с программированием кнопки удаления. Я знаю, как удалить номер из массива, но я не уверен, как удалить номер из текстовой области.

Как удалить строку из текстовой области, которая содержит определенное число?

Дополнительные примечания: единственный ввод - целые числа.

2 ответа

На самом деле ваш вопрос может быть проблемой XY, когда вы спрашиваете, как исправить конкретную проблему с кодом, когда лучшим решением является использование совсем другого подхода. Рассмотрите возможность использования JList, а не JTextArea. Вы можете легко настроить его так, чтобы он выглядел точно так же, как JTextArea, но с помощью JList вы можете гораздо легче удалить элемент, например линию, удалив его из модели.

Например:

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;

@SuppressWarnings("serial")
public class NumberListEg extends JPanel {
    private static final int VIS_ROW_COUNT = 10;
    private static final int MAX_VALUE = 10000;
    private DefaultListModel<Integer> listModel = new DefaultListModel<>();
    private JList<Integer> numberList = new JList<>(listModel);
    private JSpinner spinner = new JSpinner(new SpinnerNumberModel(0, 0, MAX_VALUE, 1));
    private JButton addNumberButton = new JButton(new AddNumberAction());

    public NumberListEg() {
        JPanel spinnerPanel = new JPanel();
        spinnerPanel.add(spinner);
        JPanel addNumberPanel = new JPanel();
        addNumberPanel.add(addNumberButton);

        JPanel removeNumberPanel = new JPanel();
        JButton removeNumberButton = new JButton(new RemoveNumberAction());
        removeNumberPanel.add(removeNumberButton);

        JPanel eastPanel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        // gbc.anchor = GridBagConstraints.WEST;
        gbc.insets = new Insets(3, 3, 3, 3);
        eastPanel.add(spinner, gbc);
        gbc.gridy = GridBagConstraints.RELATIVE;
        eastPanel.add(addNumberButton, gbc);
        eastPanel.add(removeNumberButton, gbc);
        // eastPanel.add(Box.createVerticalGlue(), gbc);

        numberList.setVisibleRowCount(VIS_ROW_COUNT);
        numberList.setPrototypeCellValue(1234567);
        numberList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane listPane = new JScrollPane(numberList);
        listPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        setLayout(new BorderLayout());
        add(listPane, BorderLayout.CENTER);
        add(eastPanel, BorderLayout.LINE_END);
    }

    private class AddNumberAction extends AbstractAction {
        public AddNumberAction() {
            super("Add Number");
            putValue(MNEMONIC_KEY, KeyEvent.VK_A);
        }

        @Override
        public void actionPerformed(ActionEvent arg0) {
            int value = (int) spinner.getValue();
            if (!listModel.contains(value)) {
                listModel.addElement(value);
            }
        }
    }

    private class RemoveNumberAction extends AbstractAction {
        public RemoveNumberAction() {
            super("Remove Number");
            putValue(MNEMONIC_KEY, KeyEvent.VK_R);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            Integer selection = numberList.getSelectedValue();
            if (selection != null) {
                listModel.removeElement(selection);
            }
        }
    }

    private static void createAndShowGui() {
        NumberListEg mainPanel = new NumberListEg();

        JFrame frame = new JFrame("Gui");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

Невозможно удалить из массива, вы можете сделать индекс пустым, например String a= Integer.toString(тип для int), затем a.replace("your int","");

Другие вопросы по тегам