Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2017, 00:00   #1
VLAdmin
Новичок
Джуниор
 
Регистрация: 14.11.2017
Сообщений: 3
По умолчанию Выбор строки в JTable мышью и удаление выбранной строки

Доброго времени суток!

Помогите написать обработчик событий, который при выделении строки в JTable по щелчку мыши на строке запоминал бы её, а затем по нажатию кнопки Button удалял бы эту строку.
Прошу с комментариями по возможности, ООП только 2-ой семестр изучаю.

Код приложения с вариантом реализации данной задачи, который не работает:

Код:
public class Class_Tables {
 
    public static void main (String[] args) {
 
        Frame_Tables frame=new Frame_Tables();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
 
class Frame_Tables extends JFrame
{
    public Frame_Tables() {
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        setTitle("Окно с полем для ввода");
        setBackground(Color.PINK);
        setLayout(new GridBagLayout());
 
        model_table=new Table_pogoda_Model(); //Создание объекта модели таблицы
        table_pogoda=new JTable(model_table); //Сздание таблицы по модели model_table
        JScrollPane table_pogodaScrollPage=new JScrollPane(table_pogoda); //Добавление в таблицу прокрутки
        table_pogodaScrollPage.setPreferredSize(new Dimension(500,500)); //установка размеров таблицы
        //добавление данныч в таблицу
        String[] date=new String[5];
        date[0]="0";
        date[1]="Оренбург";
        date[2]="-15";
        date[3]="45%";
        date[4]="С";
        model_table.addDate(date);
        add(table_pogodaScrollPage,new GridBagConstraints(0,1,5,1,1,1,
        GridBagConstraints.NORTH,GridBagConstraints.BOTH,new Insets(1,1,1,1),0,0));
 
        JButton dellButton=new JButton("Удалить строку");
        DelButtonAction delButtonAction=new DelButtonAction();//???
        dellButton.addActionListener(delButtonAction);        //???
        AddButtonAction open_forms_for_add=new AddButtonAction();
        JButton open_forms_for_input=new JButton("Открыть форму для ввода");
        open_forms_for_input.addActionListener(open_forms_for_add);
        JButton clearButton=new JButton("Очиститьтаблицу");
        add(dellButton,new GridBagConstraints(0,2,1,1,1,1,
                GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
        add(open_forms_for_input,new GridBagConstraints(1,2,1,1,1,1,
                GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
        add(clearButton,new GridBagConstraints(2,2,1,1,1,1,
                GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
 
        //Объект JList. Можно подтянуть из СУБД
        String[] str_goroda={"Оренбург","Москва","Екатеринбург","Сочи"};
        JList gorodList=new JList(str_goroda);
        JScrollPane gorodScrollPane=new JScrollPane(gorodList);
        gorodScrollPane.setPreferredSize(new Dimension(100,150));
        add(gorodScrollPane,new GridBagConstraints(0,3,1,7,1,1,
                GridBagConstraints.NORTH,GridBagConstraints.BOTH,new Insets(1,1,1,1),0,0));
    }
    public JTable table_pogoda;
    public Table_pogoda_Model model_table;
    private static final int DEFAULT_WIDTH=600;
    private static final int DEFAULT_HEIGHT=400;
 
    //Обработчик кнопки open_forms_for_input добавления записи, открывающий форму для заполнения
public class AddButtonAction extends Table_pogoda_Model implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e) {
        FrameInPut frameADD=new FrameInPut(model_table);
        frameADD.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frameADD.setVisible(true);
    }
}
 
public class DelButtonAction extends Table_pogoda_Model implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        final Object[] valueAt = new Object[1];
        //ListSelectionListener - слушатель реагирующий на выбор елемента List
 
        ListSelectionModel selectionModel = table_pogoda.getSelectionModel(); //Следит за тем , какую строку выделяют в таблице
        selectionModel.addListSelectionListener(new ListSelectionListener() {
            //Метод вызывающийся у слушателя при выделении строки
            @Override
            public void valueChanged(ListSelectionEvent e) {
 
                if (table_pogoda.getSelectedRows().length != 1) //getSelectedRows() - возвращает массив индексов выделенных строк
                {
                    return;
                }
                int viewRowIndex = table_pogoda.getSelectedRows()[0];
                int rowIndex = table_pogoda.convertRowIndexToModel(viewRowIndex);//Приобразование индексов строк в исходные (если есть сортировка)
                valueAt[0] = model_table.getValueAt(rowIndex, 0);
                SwingUtilities.invokeLater(new Runnable()
                {
                    @Override
                    public void run() {
                        // удалить данные
                        dellRow(String.valueOf(valueAt[0]));
                        // перерисовать
                        model_table.fireTableDataChanged();
                    }
                });
 
            }
        });
 
    }
}
 
}
Модель таблицы:
Код:
//Модель таблицы
class Table_pogoda_Model extends AbstractTableModel {
 
    private int columnCount=5;
    private ArrayList<String[]> dataArrayList;
 
    public Table_pogoda_Model()
    {
        dataArrayList=new ArrayList<String[]>();
        //dataArrayList.add(new String[getColumnCount()]);
    }
 
    //Возвращает количество строк в таблице
    @Override
    public int getRowCount() {
        return dataArrayList.size();
    }
 
    //Возвращает количество колонок в таблице
    @Override
    public int getColumnCount() {
        return columnCount;
    }
    //Возвращает значение определнной ячейки таблицы, по номеру стр и номеру колонки
    @Override
    public Object getValueAt(int rowIndex, int columnIndex)
    {
        String [] rows=dataArrayList.get(rowIndex);
        return rows[columnIndex];
    }
 
    //М-д добавляющи данные в таблицу
    public void addDate(String[] row)
    {
        String [] rowTable=new String[getColumnCount()];
        rowTable=row;
        dataArrayList.add(rowTable);
    }
    //Установка наименований столбцов
    @Override
    public String getColumnName(int indexColumn)
    {
        switch (indexColumn){
            case 0:return "#id";
            case 1:return "Город";
            case 2:return "Температура";
            case 3:return "Влажность";
            case 4:return "Ветер";
        }
        return "";
    }
 
    //Удаление строки
    public void dellRow (String str)
    {
        for (int i=0;i<dataArrayList.size();i++) {
            String[] row = new String[5];
            row=dataArrayList.get(i);
            if(row[0].equals(row)) dataArrayList.remove(i);
        }
 
    }
 
}
VLAdmin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка по убыванию ВЫБРАННОЙ строки двумерного массива Cvetlana_tan Помощь студентам 0 14.01.2017 18:55
подсчет суммы выбранной строки БД Аксесс 03 в Делфи 7 xJohnx БД в Delphi 2 15.04.2011 20:58
Номер выбранной строки в Ibtable Pavel_S БД в Delphi 3 14.12.2010 10:02
Передача выбранной строки из выпадающего списка в следующий обработчик (страницу) Des PHP 1 07.11.2010 21:33
Как определить номер выбранной строки в стринггриде Deathwatcher Общие вопросы Delphi 2 15.06.2009 14:40