Как найти выбранную строку в JTable, чтобы удалить ее?

1

Я попытался создать JTable который имеет один столбец как JButton для удаления выбранной строки. Но я до сих пор не знаю, что добавить в кнопки ActionListener чтобы определить его строку и удалить ее.

Вот мой код:

public class JavaApplication81 {
    JFrame frame;
    JPanel panel;
    JTable table;
    JScrollPane tableScroll = new JScrollPane();
    DefaultTableModel tableModel;
    public JavaApplication81(){
        frame = new JFrame("Frame");
        panel = new JPanel();

        String col[] = {" ", "File", "Remove"};
        tableModel = new DefaultTableModel(col,0);
        table = new JTable(){
            private static final long serialVersionUID = 1L;
            //Returning the Class of each column will allow different
            //renderes to be used based on class
            @Override
            public Class getColumnClass(int column){
                return getValueAt(0, column).getClass();
            }
        };
        table.setModel(tableModel);
        table.setPreferredScrollableViewportSize(new Dimension(400,200));
        tableScroll.setViewportView(table);

        Object[] data = {"icon", "file", "Remove"};
        tableModel.addRow(data);

        table.getColumn("Remove").setCellRenderer(new ButtonRenderer());
        table.getColumn("Remove").setCellEditor(new ButtonEditor(new JCheckBox()));

        panel.add(tableScroll);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(450, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        new JavaApplication81();
    }

    ///////////////////////
    public class ButtonRenderer extends JButton implements TableCellRenderer {

      public ButtonRenderer() {
        setOpaque(true);
      }

      public Component getTableCellRendererComponent(JTable table, Object value,
                       boolean isSelected, boolean hasFocus, int row, int column) {

        setText("Remove");
        return this;
      }
    }

    public class ButtonEditor extends DefaultCellEditor {
        protected JButton button;

        public ButtonEditor(JCheckBox checkBox) {
          super(checkBox);
          button = new JButton();
          button.setOpaque(true);
          button.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {

            }
          });
        }

        public Component getTableCellEditorComponent(JTable table, Object value,
                         boolean isSelected, int row, int column) {


          button.setText("Remove");
          return button;
        }
    }
}

Любая идея удалить строку каждой кнопки при нажатии?

  • 1
    JTable#getSelectedRow , вы захотите передать его через JTable#convertRowIndexToModel чтобы получить модельный индекс. Оттуда все сводится к модели, но DefaultTableModel#removeRow должен работать
  • 2
    Что бы ни стоило, поместить кнопку «удалить» в каждом ряду - это, ну, в общем, веб 80-х. Лучше использовать комбинацию привязок клавиш, панелей инструментов / меню или кнопок, поскольку удаление 100 строк будет просто утомительным, а дополнительный столбец можно использовать для лучшего отображения данных. Например и пример
Показать ещё 4 комментария
Теги:
swing
jtable
defaulttablemodel
actionlistener

1 ответ

2
Лучший ответ

Столбец таблицы кнопок показывает простой способ сделать это.

Он предоставляет рендерер/редактор и простой способ получить строку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню