Нажатие кнопки в одной строке Jtable меняет метки во всех записях таблицы - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь составить список JPanel с кнопками, полями edittext и другими компонентами Swing, но не могу найти примеры создания списков в Swing.Я пытался сделать это с jTable, в котором есть один столбец с JPanel в ячейках, но мои поля меток меняются во всех элементах jPanel после нажатия кнопки

Вот код, который я сделал из разных примеров.Этот класс имеет методы визуализации и редактирования.Я пытаюсь изменить текст метки при нажатии кнопки.Но все метки (я хочу изменить только тот, который необходим) меняют свой текст ... Может быть, я установил onMouseListener не в этом месте ...

public class RssFeedCell extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
    JPanel panel;
    JLabel text;
    JButton showButton;
    JLabel label;

    RssFeed feed;

    public RssFeedCell() {
        label = new JLabel();
        text = new JLabel();
        showButton = new JButton("View Articles");
        showButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label.setText("ed");
            }
        });

        panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel.add(text);
        panel.add(showButton);
        panel.add(label);
    }

    private void updateData(RssFeed feed, boolean isSelected, JTable table) {
        this.feed = feed;

        text.setText("" + feed.name + "" + feed.url + "Articles " + feed.articles.length + "");

        if (isSelected) {
            panel.setBackground(table.getSelectionBackground());
        } else {
            panel.setBackground(table.getBackground());
        }
    }

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        RssFeed feed = (RssFeed) value;
        updateData(feed, true, table);
        return panel;
    }

    public Object getCellEditorValue() {
        return null;
    }

    public Component getTableCellRendererComponent(JTable table, Object value,
                                                   boolean isSelected, boolean hasFocus, int row, int column) {
        RssFeed feed = (RssFeed) value;
        updateData(feed, isSelected, table);
        return panel;
    }
}

1 Ответ

0 голосов
/ 16 декабря 2018

Существует только один label.Вам необходимо включить состояние ячейки в данные TableModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...