Новичок
Джуниор
Регистрация: 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);
}
}
}
|