Как сделать невидимыми несколько столбцов в таблице (JTable), не по по порядку - Java
Формулировка задачи:
Вот 2 класса.
1-й это фрейм, который отображает таблицу
2-й класс, создает модель таблицы по умолчанию.
Знаю как скрыть 1 столбец.или такНо мне необходимо чтобы:
1. Столбцы могут идти не по порядку и их нужно скрыть.
2. Столбцы которые невидимы пользователю, все равно должны участвовать в вычислениях. То есть они должны поступить в дефолтную модель таблицы, но не должны отображаться во фрейме.
Есть ли решение чтобы не писать заново какой-то класс, чтобы из него потом доставать метод, позволяющий скрывать столбцы?
Насколько возможно простое решение покажите пожалуйста?
package com.trainigcenter.carsofrentv3.frames; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import com.trainigcenter.carsofrentv3.check.CheckEnterValues; import com.trainigcenter.carsofrentv3.check.GetAndProcessingOfDate; import com.trainigcenter.carsofrentv3.dao.DaoСars; import com.trainigcenter.carsofrentv3.db.DB; import com.trainigcenter.carsofrentv3.entity.Сars; public class TableFrameCars extends JFrame { private static final long serialVersionUID = 1L; private DB db; private int idRole; private int idUser; private String name; private MyJPanel panel,panelCars, panelCostDay; private JButton update; private JButton choose; private JButton orderRegistration; private MyTable table, tableCostDay; private JScrollPane scroll, scrollCostDay; private JTabbedPane tabbed; public TableFrameCars(DB db, int idRole) throws HeadlessException { super(); this.db = db; this.idRole = idRole; this.setTitle("База автомобилей."); this.setSize(790, 500); this.setResizable(false); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.initComponents(); this.action(); this.setVisible(true); } public TableFrameCars(DB db, int idUser, String name, int idRole) throws HeadlessException { super(); this.db = db; this.idUser = idUser; this.name = name; this.idRole = idRole; this.setTitle("База автомобилей."); this.setSize(790, 500); this.setResizable(false); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.initComponents(); this.action(); this.setVisible(true); } /** * Задает ширину для указанного столбца * @param index - номер столбца * @param width - ширина столбца */ private void setSizeColumnAndRows(int index, int width) { TableColumnModel tableColumnModel = table.getColumnModel(); TableColumn tableColumn = tableColumnModel.getColumn(index); tableColumn.setPreferredWidth(width); } private void initComponents() { Font font = new Font("Arbat-Bold", Font.PLAIN, 16); Color yellow = new Color(255, 255, 0); Color blue = new Color(0, 0, 255); update = new JButton("Записать изменения в Базу Данных."); update.setFont(font); update.setForeground(Color.BLUE); update.setBackground(yellow); update.setPreferredSize(new Dimension(350, 35)); choose = new JButton("Возврат в окно выбора таблиц."); choose.setFont(font); choose.setForeground(Color.BLUE); choose.setBackground(yellow); choose.setPreferredSize(new Dimension(350, 35)); orderRegistration = new JButton("Оформить заказ."); orderRegistration.setFont(font); orderRegistration.setForeground(Color.YELLOW); orderRegistration.setBackground(blue); orderRegistration.setPreferredSize(new Dimension(350, 35)); table = new MyTable(db.query("SELECT * FROM cars")); table.setRowHeight(25); /* TableColumnModel cm = table.getColumnModel(); cm.removeColumn(cm.getColumn(3));*/ /*table.removeColumn(table.getColumnModel().getColumn(0));*/ tableCostDay = new MyTable(db.query("SELECT * FROM costday")); tableCostDay.setRowHeight(25); this.setSizeColumnAndRows(0, 15); this.setSizeColumnAndRows(1, 250); this.setSizeColumnAndRows(2, 35); this.setSizeColumnAndRows(3, 50); this.setSizeColumnAndRows(4, 90); this.setSizeColumnAndRows(5, 45); this.setSizeColumnAndRows(5, 45); scroll = new JScrollPane(table); scroll.setPreferredSize(new Dimension(765, 150)); scrollCostDay = new JScrollPane(tableCostDay); scrollCostDay.setPreferredSize(new Dimension(200, 130)); panel = new MyJPanel(); panelCars = new MyJPanel(); panelCars.add(scroll); panelCars.add(orderRegistration); panelCostDay = new MyJPanel(); panelCostDay.add(update); panelCostDay.add(scrollCostDay); panelCostDay.setBackground(blue); tabbed = new JTabbedPane(); tabbed.setPreferredSize(new Dimension(790, 500)); tabbed.addTab("Выбор машины", panelCars); tabbed.addTab("Стоимость аренды", panelCostDay); panel.add(tabbed); this.add(panel); } /*panel.add(update); panel.add(scroll); panel.add(orderRegistration); panel.add(choose); panel.add(scrollCostDay);*/ /** * public void mouseEntered(MouseEvent e) - наведение мыши * public void mouseExited(MouseEvent e)- нажимание мыши */ private void action() { table.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_SPACE) { // пишем алгоритм обработки данных по нажатию клавиши Enter или пробел } } }); table.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } }); update.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (idRole == 1) { ResultSet rs = db.query("SELECT * FROM cars"); boolean isWriteDataID = false; boolean isWriteDataSpeed = false; boolean isWriteYear = false; boolean isWriteFuel = false; boolean isWriteIdCost = false; boolean isIdNotNumber = false; boolean isSelectedRow = false; if (CheckEnterValues.checkIsSelectedRow(table.getSelectedRow())) { System.out.println(" Не выделена строка. Запись в Базу данных - не производится"); } else { isSelectedRow = true; String idCheck = String.valueOf(table.getValueAt(table.getSelectedRow(), 0)); String modelCheck = String.valueOf(table.getValueAt(table.getSelectedRow(), 1)); String speedCheck = String.valueOf(table.getValueAt(table.getSelectedRow(), 2)); String colorCheck = String.valueOf(table.getValueAt(table.getSelectedRow(), 3)); String yearCheck = String.valueOf(table.getValueAt(table.getSelectedRow(), 4)); String fuelCheck = String.valueOf(table.getValueAt(table.getSelectedRow(), 5)); String costCheck = String.valueOf(table.getValueAt(table.getSelectedRow(), 6)); if (CheckEnterValues.checkIsDigit(idCheck, "id")) { isIdNotNumber = true; } if (!isIdNotNumber) { rs = db.query("SELECT * FROM cars WHERE id = " + idCheck); try { if (rs.next()) { try { int idSql = 0; idSql = rs.getInt("id"); System.out.println("idSql = " + idSql); } catch (SQLException e1) { e1.printStackTrace(); } } } catch (SQLException e1) { e1.printStackTrace(); } isWriteDataID = true; } else { isWriteDataID = false; } if (!CheckEnterValues.checkIsDigit(speedCheck, "speed")) { int speedCheckInt = Integer.valueOf(speedCheck); if (speedCheckInt < 200 || speedCheckInt > 400) { System.out.println("проверка на достоверноое значение скорости\n"); isWriteDataSpeed = false; String message1 = " В поле 'speed' нельзя занести данное значение.\n" + " Спорткар не может развить такую скорость"; String message2 = "Поля таблицы."; JOptionPane.showMessageDialog(panel, message1, message2, JOptionPane.INFORMATION_MESSAGE); } else { isWriteDataSpeed = true; } } else { isWriteDataSpeed = false; System.out.println("id - введены не цифры"); } if (!CheckEnterValues.checkIsDigit(yearCheck, "year_manufacture")) { int yearCheckInt = Integer.valueOf(yearCheck); if (yearCheckInt < 1950 || yearCheckInt > 2019) { System.out.println("проверка на достоверное значение года выпуска\n"); isWriteYear = false; String message1 = " В поле 'year_manufacture' нельзя занести данное значение.\n" + " Спорткары в данный период времени еще не выпускались"; String message2 = "Поля таблицы."; JOptionPane.showMessageDialog(panel, message1, message2, JOptionPane.INFORMATION_MESSAGE); } else { isWriteYear = true; } } else { isWriteYear = false; System.out.println("id - введены не цифры"); } if (!CheckEnterValues.checkIsDigit(fuelCheck, "fuel_flow")) { int fuelCheckInt = Integer.valueOf(fuelCheck); if (fuelCheckInt < 1 || fuelCheckInt > 14) { System.out.println("проверка на достоверное значение года выпуска\n"); isWriteFuel = false; String message1 = " В поле 'fuel_flow' нельзя занести данное значение.\n" + " Спорткары c таким расходом топлива - не исправны"; String message2 = "Поля таблицы."; JOptionPane.showMessageDialog(panel, message1, message2, JOptionPane.INFORMATION_MESSAGE); } else { isWriteFuel = true; } } else { isWriteFuel = false; System.out.println("id - введены не цифры"); } int idLastTable = 0; if (tableCostDay.getRowCount() == 0) { idLastTable = 0; } else { idLastTable = Integer .valueOf((tableCostDay.getValueAt(table.getRowCount() - 1, 0).toString())); } if (!CheckEnterValues.checkIsDigit(costCheck, "id_cost_day")) { int costCheckInt = Integer.valueOf(costCheck); if (costCheckInt < 1 || costCheckInt > idLastTable) { System.out.println("проверка на достоверное значение идентификатора таблицы\n"); isWriteIdCost = false; String message1 = " В поле 'id_cost_day' нельзя занести данное значение.\n" + " Разрешены :\n" + " 1, 2, 3, 4"; String message2 = "Поля таблицы."; JOptionPane.showMessageDialog(panel, message1, message2, JOptionPane.INFORMATION_MESSAGE); } else { isWriteIdCost = true; } } else { isWriteIdCost = false; System.out.println("id - введены не цифры"); } if (isWriteDataID && isWriteDataSpeed && isWriteYear && isWriteFuel && isWriteIdCost && isSelectedRow) { Integer id = Integer.valueOf(idCheck); String model = modelCheck; System.out.println("model = " + model); Integer speed = Integer.valueOf(speedCheck); System.out.println("speed = " + speed); String color = colorCheck; System.out.println("color = " + color); Integer year = Integer.valueOf(yearCheck); System.out.println("year = " + year); Integer fuel = Integer.valueOf(fuelCheck); System.out.println("fuel = " + fuel); Integer cost = Integer.valueOf(costCheck); System.out.println("cost = " + cost); DaoСars daoCars = new DaoСars(db); Сars cars = new Сars(id, model, speed, color, year, fuel, cost); daoCars.update(cars); System.out.println("Изменения записаны"); } } } else if (idRole == 2) { String message1 = " Вам запрещено редактировать данную таблицу."; String message2 = "Уровень доступа."; JOptionPane.showMessageDialog(panel, message1, message2, JOptionPane.WARNING_MESSAGE); } } }); choose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if (!GetAndProcessingOfDate.getValidate(idRole)) { new TablesFrame(db); dispose(); System.out.println("Переход в TablesFrame "); } } }); orderRegistration.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { new ChooseOfProductsFrame(db, idUser, name, idRole); dispose(); System.out.println("Переход в ChooseOfProductsFrame"); } }); } }
package com.trainigcenter.carsofrentv3.frames; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.Vector; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumnModel; /** * Создание модели таблиц * * @DefaultTableModel defaultModel - создаем модель таблицы по умолчанию * @ResultSetMetaData rsmd; - хранение служебной информации о таблице for (int i * = 1; i <= rsmd.getColumnCount(); i++) - этот цикл, * обрабатывает таблицу, получая имена полей(столбцов) данной * таблицы addColumn() - это метод добавлет в модель таблицы, * только шапку таблицы while * * @(rs.next()) { - запускаем * цикл, который обрабатывает столбцы текущей строки в * таблице Vectorv - создаем коллекцию класса * Vector v.add(rs.getString(i)) - обрабатываем полученную * строку и затем, значение каждого столбца помещаем в свою * позицию текущей строки обрабатываемой таблицы * defaultModel.addRow(v) - добавление строку в модель * таблицы ( модель по умолчанию) После того, как цикл while * пройдет всю обрабатываемую таблицу и модель таблицы будет * заполнена, она с помощью метода setModel, регистрируется и * далее этот объект можно помещать во нужный фрейм. @ @ * this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - * позволяет растягивать столбцы вручную * @setAutoResizeMode(AUTO_RESIZE_ALL_COLUMNS); - автоматическая подстройка ширины столбца * в зависимости от ширины названия поля * public boolean isCellEditable(int row, int column) - запрет на редактиорование 1-го стольбца в таблице * @ @author IT * */ public class MyTable extends JTable { private static final long serialVersionUID = 1L; public MyTable(ResultSet rs) { super(); DefaultTableModel defaultModel = new DefaultTableModel(); ResultSetMetaData rsmd; try { rsmd = rs.getMetaData(); for (int i = 1; i <= rsmd.getColumnCount(); i++) { defaultModel.addColumn(rsmd.getColumnName(i)); } while (rs.next()) { Vector v = new Vector (); for (int i = 1; i <= rsmd.getColumnCount(); i++) { v.add(rs.getString(i)); } defaultModel.addRow(v); } this.setModel(defaultModel); setAutoCreateColumnsFromModel(false); setAutoResizeMode(AUTO_RESIZE_ALL_COLUMNS); } catch (SQLException ex) { System.out.println(" Ошибка в классе MyTable " + ex); } } @Override public boolean isCellEditable(int row, int column) { if(column == 0) { return false; } return true; } }
TableColumnModel cm = table.getColumnModel(); cm.removeColumn(cm.getColumn(3))
table.removeColumn(table.getColumnModel().getColumn(0));
Решение задачи: «Как сделать невидимыми несколько столбцов в таблице (JTable), не по по порядку»
textual
Листинг программы
package com.trainigcenter.carsofrentv3.frames; import java.awt.Dimension; import java.awt.HeadlessException; import com.trainigcenter.carsofrentv3.db.DB; import static com.trainigcenter.carsofrentv3.check.GetAndProcessingOfDate.*; /** * Класс наследуется от класса, который делает заготовку фрейма * @getValidateUser() - проверяются права доступа * @author it * */ public class TableFrameOrders extends Frames { private static final long serialVersionUID = 1L; public TableFrameOrders(DB db, int idRole, String name, int idUser) throws HeadlessException { super(db, idRole, idUser, name); if(getValidateUser(idRole)) { this.setTitle("Ваши Заказы."); setSize(1100, 250); } else { this.setTitle("Заказы."); } } @Override protected void setSizeColumnAndRows(int index, int width) { super.setSizeColumnAndRows(index, width); } /** * @getValidateUser(idRole) - если вход осущетствлен под правами пользователя, * показывается таблица с укороченным вариантом. * Цикл for и оператор switch - скрывают выборочно указанные столбцы. */ @Override protected void initComponents() { this.table = new MyTable(db.query("SELECT * FROM orders WHERE id_client = " + super.idUser )); this.table.setRowHeight(25); if(getValidateUser(idRole)) { for(int i = 0; i < this.table.getColumnModel().getColumnCount(); ) { switch (i) { case 0: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); i = 1; System.out.println("+++++++++ i = " + i); break; case 1: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); i = 2; System.out.println("+++++++++ i = " + i); break; case 2: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); i = 6; System.out.println("+++++++++ i = " + i); break; case 6: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); System.out.println("+++++++++ i = " + i); i = 7; break; case 7: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); System.out.println("+++++++++ i = " + i); i = 8; break; case 8: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); System.out.println("+++++++++ i = " + i); i = 9; break; case 9: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); System.out.println("+++++++++ i = " + i); i = 10; break; case 10: super.table.getColumnModel().getColumn(i).setMinWidth(0); super.table.getColumnModel().getColumn(i).setMaxWidth(0); System.out.println("+++++++++ i = " + i); i = 12; break; } } this.setSizeColumnAndRows(3, 60); this.setSizeColumnAndRows(4, 90); this.setSizeColumnAndRows(5, 90); this.setSizeColumnAndRows(11, 810); super.initComponents(); this.scroll.setPreferredSize(new Dimension(1070, 207)); this.panel.add(super.scroll); this.add(super.panel); } else { System.out.println(" Работает администратор."); this.setSizeColumnAndRows(0, 25); this.setSizeColumnAndRows(1, 12); this.setSizeColumnAndRows(2, 10); this.setSizeColumnAndRows(3, 60); this.setSizeColumnAndRows(4, 90); this.setSizeColumnAndRows(5, 70); this.setSizeColumnAndRows(6, 25); this.setSizeColumnAndRows(7, 35); this.setSizeColumnAndRows(8, 35); this.setSizeColumnAndRows(9, 25); this.setSizeColumnAndRows(10, 25); this.setSizeColumnAndRows(11, 250); } } @Override protected void action() { super.action(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д