Conversation with Merlin [email protected] · Tue Dec 05 2023

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); JRadioButton carButton = new JRadioButton("Легковая машина"); JRadioButton truckButton = new JRadioButton("Грузовик"); JRadioButton mobileButton = new JRadioButton("Мобильное устройство"); JRadioButton pcButton = new JRadioButton("ПК"); JRadioButton trueButton = new JRadioButton("true"); JRadioButton falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } }

private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel();

try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); }

} }

напиши метод(ы) которые подключат радиокнопки true, false и будет менять таблицу в зависимости от того, что выбрано на радиокнопках (в таблице есть колонка состояние(4) в которой хранится либо true либо false)

Для реализации логики, изменяей таблицу в зависимости от выбранных радиокнопок, вам потребется добавить слушателей действий к каждой изиокнопок с помощью метода addActionListener. В каждом слушателе вы можете определить логику обновления таблицы в зависимости от состояния радиокок. Вот прный код, показывающий, как это может быть сделано:

// Где-то в вашем классе GUI, после создания радиокнопок carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadio(); } }); // Где-то в вашеме GUI, после методов управления интерфейсом private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (TableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // Ваш метод для получения выбранного типаехники String selected = getSelectedConditionFromRadioButtons(); // Ваш метод для получения выбного состояния // Вызов метода, который будет фильтровать и обновлять таблицу на основе выбранных радиокнопок // Напр: // filterAndShowSelectedTypeAndCondition(selectedType, selectedCondition); }

Примерный код выше добавляет слушателей действий к каждой радиокнопке и определяет метод updateTableBasedOnRadioSelection(), который вызывается при выборе любой из радиокнопок. Этот метод обновляет таблицу в соответствии с выбранными параметрами. Для полной реализации вам необходимо реализоватьы getSelectedTypeFromRadioButtons() и getSelectedConditionFromRadioButtons() для получения выбранных значений радиокноп и метод filterAndShowSelectedTypeAndCondition() для фильтрации и обновления таблицы.

напиши код для моего метода updateTableBasedOnRadioSelection

Конечно, вот пример кода метода updateTableBasedOnRadioSelection() для вашего класса GUI:

private void updateTableBasedOnRadio() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники String selectedCondition = getSelectedConditionFromRadioButtons(); // метод дляения выбранного состояния for (int i = model.getRowCount() - 1; i >=0; i--) { String type = (String).getValueAt(i, 0); String condition = (String) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition)) { .removeRow(i); } } }

В этом методе первоначально получаются выбранный тип и состояние из радиокнопок. Посе этого происходит перебор всех строк таблице. Если тип или состояние техники в строке не совпадает сранными значениями радиокнопок, тота строка удаляется из модели таблицы. Таким образом, таблица обновляется и отображает только теы, которые соответствуют выбранным радиоккам.

getSelectedTypeFromRadioButtons(), getSelectedConditionFromRadioButtons() напиши код для них

Конечно, вот пример кода для методов getSelectedTypeFromRadioButtons() и getSelectedConditionFromRadioButtons():

private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано } } private StringSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return "True"; } else if (false.isSelected()) { return "False"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

В этих методах мы проверяем, какие радиокнопки выбраны, и возвращаем соответствующие значения "", "Truck", "Mobile", "PC" для метода getSelectedTypeFromRadioButtons() и "True",False" для метода getSelectedConditionFromRadioButtons(). Если ничего не выбрано, возвращаем пустую строку или другое подходящее значение по умолчанию.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); JRadioButton carButton = new JRadioButton("Легковая машина"); JRadioButton truckButton = new JRadioButton("Грузовик"); JRadioButton mobileButton = new JRadioButton("Мобильное устройство"); JRadioButton pcButton = new JRadioButton("ПК"); JRadioButton trueButton = new JRadioButton("true"); JRadioButton falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

}

private String getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return "True"; } else if (falseButton.isSelected()) { return "False"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано } }

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники String selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); String condition = (String) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition)) { model.removeRow(i); } } }

}

исправь ошибки

Пожалуйста, вот исправленный код:

import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; public class GUI extends JFrame { private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; public GUI() { // ... (ваш текущий конструктор без изменений) carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); // ... (ваш текущий код для добавления радиокнопок в панель) carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); // ... (аналогично для остальных радиокнопок) setVisible(true); } // ... (ваш текущий код) private void saveActionPerformed(ActionEvent evt) { // ... (ваш текущий код сохранения с минорными корректировк) FileWriter file; PrintWriter pw try { file = FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) " " + model.getValueAt, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данныено сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { // (ваш текущий код для получения выбранного типа техники без изменений) } private String getSelectedConditionFromRadioButtons() { // (ваш текущий код для получения выбранного состояния без изменений) } private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); String selectedCondition = getSelectedConditionFromButtons(); for (int i = model.getRowCount - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); String condition = (String) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition)) { model.removeRow(i); } } } }

Эти измененияны исправить ошибки в вашем коде.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "javax.swing.JRadioButton.isSelected()" because "this.carButton" is null

Проблема здесь в том, что переменная carButton в методе updateTableBasedOnSelection() не инициализирована в конструкторе вашего класса GUI Давайте убедимся, что правильная переменная carButton устанавливается, а не локальная переменная в конструкторе класса.

Вместо

JRadioButton carButton = new JRadioButton("Легковая машина");

Используй

carButton = new JRadioButton("Легковая машина");

бедитесь, вы делаете это для всех радиокнопок в конструкторе. После этого, переменная carButton будет доступна и не будет равна null при вызове методов.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class java.lang.String (java.lang.Boolean and java.lang.String are in module java.base of loader 'bootstrap') at lab9.GUI.updateTableBasedOnRadioSelection(GUI.java:201) at lab9.GUI$4.actionPerformed(GUI.java:101)

Проблема в вашем коде связана с тем, что вы пытаетесь привести boolean к строковому типу, что вызывает исключение ClassCastException. Чтобы это исправить, вам нужно преобразовать вашу переменную типа boolean в строковый формат.

Измените метод getSelectedConditionFromRadio() следующим образом:

private String getSelectedConditionFromRadio() { if (trueButton.isSelected()) { return "True"; } else if (falseButton.isSelected()) { return "False"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано } }

Это позволит возвращать строковые значения "True" или "False" вместо булевых значений.

Также, убедитесь, что в методе updateTableBasedOnRadioSelection() вы используете строковые значения для сравнения, а не булевые значения. Измените этот метод следующим образом:

private void updateTableBasedOnRadioSelection() { DefaultTableModel = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники String selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); String = (String) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition)) { model.removeRow(i); } } }

Эти изменения помогут избать ошибок при сравнении значений и избегут исключения ClassCastException.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class java.lang.String (java.lang.Boolean and java.lang.String are in module java.base of loader 'bootstrap') at lab9.GUI.updateTableBasedOnRadioSelection(GUI.java:201) at lab9.GUI$3.actionPerformed(GUI.java:95)

Исключение ClassCastException указывает на то, что вы пытаетесь выполнить недопустимое приведение типов, конкретно преовывать переменную типа boolean к типу String. Для решения этой проблемыам необходимо убедиться, что ваши данные корректно преобразуются из булевых значений вовый формат.

Пожалуйста, убедит, что метод getSelectedConditionFromRadioButtons() в строковое значение, а не булевое Вы можете обнов этот метод следующим образом:

private String getSelectedConditionFromRadioButtons() { if (trueButton.isSelected { return "true"; } else if (falseButton.isSelected()) { return "false"; } else { return ""; // возвращаем значение по умолчанию, если ничего не выбрано } }

Это позволит методу вать строковые значения "true" или "false" вместо булевых значений.

Кроме того убедитесь, что вы работаете соовыми значениями в методе updateTableBasedOnRadioSelection(), а не с булевымими. Обновите ваш метод следующим образ:

private updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного тип техники String selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния for (int i = model.getRowCount() - 1; i >= ; i--) { String type = (String) model.getValueAt(i, 0); String condition = (String) model.getValueAt(i, 3); (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition { model.removeRow(i); } } }

Эти изменения должны помочь в избежании ошибки исключения ClassCastException при работе с вашими данными.

та же ошибка

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

Пожалуйста, убедитесь, что в методе updateTableBasedOnRadioSelection() вы используете строки для сравнения, а не булевые значения. Ниже приведён обновлённый вариант метода:

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники String selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); String condition = (String) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition)) { model.removeRow(i); } } }

Кроме того, убедитесь, что метод getSelectedConditionFromRadioButtons() возвращает строковое значение, а не булевое. Обновите метод следующим образом:

private String getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return "true"; } else if (falseButton.isSelected()) { return "false"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано } }

Прошу вас также убедиться, что вы используете строки для сравнения во всех остальных местах вашего кода, где участвуют радиокнопки и соответствующие значения.

я использовал твой код полностью

Понял, спасибо за информацию. В таком случае, давайте проанализируем другие возможные причины проблемы.

Пожалуйста, убедитесь, что в методе getSelectedConditionFromRadioButtons() и в местах, где используются данные из радиокнопок, переменные trueButton и falseButton являются экземплярами класса JRadioButton. Также убедитесь, что они инициализированы и связаны с вашим интерфейсом правильно.

Если после этого проблема все ещё остаётся, пожалуйста, предоставьте больше информации о местах в коде, где происходит использование значений из радиокнопок и где возникает исключение ClassCastException. Это поможет м более точно идентифицировать причину проблемы и предложить более точное решение.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

}

private String getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return "true"; } else if (falseButton.isSelected()) { return "false"; } else { return ""; // возвращаем значение по умолчанию, если ничего не выбрано } }

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники String selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния

for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); String condition = (String) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition)) { model.removeRow(i); } }

}

}

Понял, благодарю за предостленный код. Похоже, написй вами код выглядит корректм. Однако, для диагностики прлемы с исключением ClassCastException нужно внимательно просмотреть, какиеы и данные используются во время выполнения программы.

тобы устранить эту проблему, вам след убедиться, что типы данных, возвращаемые методом getSelectedTypeFromRadioButtons() и getSelectedConditionFromRadioButtons(), соответствуют типам данных, используемых в методе `updateTableBasedOnRadioSelection.

Также рекомендую проверить что ваши радиокнопки правильноязаны с соответствующими переменными в вашем интерфейсе. Это такжеогло бы избежать непредвиденного поведения.

Если проблема все ещё остаётсяе выполнения этих шагов, пожалуйста, предоставьте больше подробностей об исключении ClassCastException, включая трировку стека и любую другую полную информацию,ая может помочь в установлении причины проблем.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class java.lang.String (java.lang.Boolean and java.lang.String are in module java.base of loader 'bootstrap') at lab9.GUI.updateTableBasedOnRadioSelection(GUI.java:201) at lab9.GUI$3.actionPerformed(GUI.java:95) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2314) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:407) at java.desktop/javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:411) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6620) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3398) at java.desktop/java.awt.Component.processEvent(Component.java:6385) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4995) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4827) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4827) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Исключение ClassCastException, которое вы получили, указывает на то, что возникла ошибка приведения типов. Вероятно, что выполнении метода updateTableBasedOnRadioSelection() происходит попытка привести объекты java.lang.Boolean методах getSelectedTypeFromRadioButtons() или getSelectedConditionFromRadioButtons() к типу java.lang.String, чтоывает ошибку.

Пожалуйста, убедесь, что методы getSelectedTypeFromRadioButtons() и getConditionFromRadioButtons() возвращают значения типа java.lang.String, и что эти значения корректно используются в методе updateTableBasedOnRadioSelection().

Также обратите внимание на то, что возможно необходимо выставить правильные значения в вах радиокнопках, чтобы избежать ошибок приведения типов.

Если после проверки этого кода проблема все ещё остаётся, пожалуйста, предоставьте код методов getSelectedTypeFromRadioButtons() и getSelectedConditionFromRadioButtons(), чтобы мы могли вам помочь в поиске ошибки.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

}

private boolean getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return true; } else if (falseButton.isSelected()) { return false; }

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния

for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = (boolean) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || !condition.equalsIgnoreCase(selectedCondition)) { model.removeRow(i); } }

}

}

исправь ошибки

Код содержит несколько ошибок, которые можноравить.

  1. В методе getSelectedConditionFromRadioButtons() не хватает return для случая, когда н одна из радиокнопок не выбрана. Необходимоить return false; в конце метода.

  2. Ве updateTableBasedOnRadioSelection() возникает ошибка приведения типов. Вместо приведения типа boolean к boolean`, следует просто получить значение из мод и сравнивать его напрямую с выбраннымоянием.

Исправленный код метода updateTableBasedOnRadioSelection():

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // для получения выбранного состояния for (int i = model.getRowCount - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, ); boolean condition = (boolean) model.getValueAt(i, 3); // удалите приведение типа boolean if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { // изменили условие сравнения типа и состояния model.removeRow(i); } } }

Также, я предположил, что у вас непный код для класса GUI, потому что имена методов getSelectedTypeFromRadioButtons() и getSelectedConditionFromRadioButtons() не соответствуют тому, что предоставили. Убедитесь, что импорты и определения классов Techic также присутствуют в ваш коде.

После внесения этих изменений ваш код должен функционировать корректно.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

}

private boolean getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return true; } else if (falseButton.isSelected()) { return false; } return false; }

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния

for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = (boolean) model.getValueAt(i, 3); // удалите приведение типа boolean if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { // изменили условие сравнения типа и состояния model.removeRow(i); } }

}

}

исчезают все записи таблицы при выборе любой из кнопок, хотя там есть данные записи

Привет! К сожалению, я не могу предложить компилиемый ответ на ваш запрос без дополнительной информации о классе Techic.Abstract и использовании методов getCoef и addTechnicsToTable, а так без содержания данных, которые находятся в таблице. Эта информация может быть важна для понимания того, почу записи таблицы исчезают при выборе любой из кнопок.

Е у вас есть конкретные данные или дополнительный код, который вы хотели бы поделиться, пожалуйста, предоставьте их, чтобы я смог предложить вам более точный ответ.

package lab9.Techic;

public abstract class Abstract {

String brand; String model; Boolean condition; int coef; protected Abstract(String brand, String model, Boolean condition, int coef) { this.brand = brand; this.model = model; this.condition = condition; this.coef = coef; } public abstract void crash(); public abstract boolean condition(); public final String toString() { return ("отремонтировал: " + brand + " " + model); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public Boolean getCondition() { return condition; } public void setCondition(Boolean condition) { this.condition = condition; } public int getCoef() { return coef; } public void setCoef(int coef) { this.coef = coef; }

}

package lab9.Techic;

import lab9.Interface.Interface;

public final class Car extends Abstract implements Interface {

public Car(String brand, String model, Boolean condition, int coef) { super(brand, model, condition, coef); } @Override public void crash() { double p; p = Math.random() * (10 - 1) + 1; System.out.print("вероятность поломки = "); p = coef * p; if (p >= 100) { p = 100; } System.out.printf("\u001B[44m" + "%.1f", p); System.out.println("%" + "\u001B[0m"); if (p < 50) { System.out.println("Машина: " + brand + " " + model + " --- Не сломалась"); } else { condition = false; System.out.println("Машина: " + brand + " " + model + " --- " + "\u001B[31m" + "Cломалась" + "\u001B[0m"); } } @Override public boolean condition() { if (condition) { System.out.print("Состояние на данный момент: "); System.out.println("\u001B[42m" + condition + "\u001B[0m"); } else { System.out.print("Состояние на данный момент: "); System.out.println("\u001B[41m" + condition + "\u001B[0m"); } return condition; }

}

Спасибо за предоставленный код.а основании предоставленной информации и кода я вижу, что у вас есть абстрактный класс Abstract, который служит в качестве базового класса для техники, а также класс Car, который является подклассом Abstract и реализует интерфейс Interface. У класса Car есть метод crash(), который вычисляет вероят поломки и обновляет состояние машиныДля решения проблемы исчезновения записей в таблице при выборе кнопок необходимо более детальное исследование кода в методах updateTableOnRadioSelectionиaddTechnicsToTableклассеGUI.еобходимо убедиться, что метод addTechnicsToTable корректно добавляет записи в таблицу, и методupdateTableBasedOnRadioSelection правильно фильтрует отображаемые записи в зависимости от выбранных параметров.

Кроме того, изолируй проблему, определяя, в как момент имен исчезают записи в таблице. Это поможет точнее определить причину проблемы предложить соответствующее решение.

Если у вас есть дополнительные свед или код, который мог бы помочь в диагностике проблемы, пожалуйст, поделитесь им, и я постарюсь помочь более точно.

метод addTechnicsToTable исправно работает, updateTableBasedOnRadioSelection вероятнее ошибка в нем

Понял, спасибо за уточнение. Давайте взглянем на метод updateTableBasedOnRadioSelection() для поиска возможной ошибки. Пожалуйста, предавьте его код, чтобы я мог проанализировать и предлож исправления.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

}

private boolean getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return true; } else if (falseButton.isSelected()) { return false; } return false; }

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния

for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = (boolean) model.getValueAt(i, 3); // удалите приведение типа boolean if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { // изменили условие сравнения типа и состояния model.removeRow(i); } }

}

}

Спасибо за предоставленный код Исходя из предоставленного метода updateTableBasedOnRadioSelection(), он в целом выглядит правильно, н есть несколько моментов, на которые стоит обратить вним:

  1. Убедитесь, что метод getSelectedTypeFromRadioButtons() возвращает верный тип техники в соответствии с выбранным радио-кнопк. Проверьте, что значения возвращают корректно для всех возможных случаевора.

2.бедитесь, что метод getSelectedFromRadioButtons() возвращает верное состояние зависимости от выбранной радио-кнопки.

  1. Проверьте, что блок кода ве updateTableBasedOnRadioSelection() корректно удаляет строки из таблицы, если они не соответствуют выбранным типу и состоянию.

  2. Обязатель убедитесь, что каждый раз, когда updateTableBasedOnRadioSelection() вызается, нужные данные корректно фильтруются.

Попробуйте провести тестирование с различными вариантами выбора радио-кнопок для каждогоа техники и состояний, чтобы убедить, что таблица корректно обновляется в соответствии с выбранными параметрами.

Если у вас есть дополнительные вопросы или информ, которую вы хотели бы добавить, не стесняйтесь обращаться!

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния

for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = (boolean) model.getValueAt(i, 3); if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { // изменили условие сравнения типа и состояния model.removeRow(i); } }

}

}

Код в методе updateTableBasedOnRadioSelection() корректно извлекает выбранный техники и состояние из радиокнопок. После этого происходит перебор строк в таблице, и если тип или состояние техники не соответствуют выбранным значениям, то эта строка удаляется из таблицы.

Однако в строке boolean condition = (boolean) model.getValueAt(i, 3); есть прлема в приведении типов. Так состояние представлено строкой в модели таблицы, вам следует сначала правильно извлечь значение состояния из модели и затем преобразать его в соответствующий тип данных (например, строку true или false в булевое значение true или false).

опробуйте использовать String.valueOf(model.getValueAt(i, 3)).equalsIgnoreCase("true") для извлечения и сравнения значения состояния в строковом формат.

После внесения этих измен метод updateTableBasedOnRadioSelection() должен корректно обновлять таблицу в соответствии с выбранными типом и состоянием.

Если у васникнут дополнительные вопросы или потребуется дальнейшая помощь, палуйста, сообщите мне!

String.valueOf(model.getValueAt(i, 3)).equalsIgnoreCase("true") исправь код под эту запись

Исправленный код метода updateTableBasedOnRadioSelection() будет выглядеть так:

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния for (int i =.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = Boolean.valueOf(String.valueOf(model.getValueAt(i, 3))); // конвертируем значение в строке в boolean if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { model.removeRow(i); } } }

Эти изменения позволят корректно извлекать и сравнивать булевые значения из таблицы. Пожалуйста, убедитесь, что изменения внесены верно и проведите тестирование, чтобы удостовериться, что метод работает корректно.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

}

private boolean getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return true; } else if (falseButton.isSelected()) { return false; } return true; }

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния

for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = Boolean.parseBoolean(String.valueOf(model.getValueAt(i, 3))); // конвертируем значение в строке в boolean if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { model.removeRow(i); } }

}

}

напиши метод, который будет обновлять записи в таблице (возвращать их обратно) после использования кнопок

Для того чтобы верн записи обратно в таблицу после использования кнопок необходимо иметь доступ к исходным данным или хранитьх в отдельной коллекции до изменений. На данныйомент в данном коде это не реализовано.

Если данные считываются из файла, то можно предложить следующий подход:

  1. При загрузке из файла для отображения в таблице, сохранить их в отдельной коллекции.
  2. После того как происходит фильтрация и удаление записей по выбранным критериям, использовать сохраненную коллекцию для восстановления исходных данных в таблице.

Для этого добавьте поле класса GUI, например:

private ArrayList<Abstract> originalData = new ArrayList<>();
  1. При добавлении техники в таблицу, также добавляйте эту технику в originalData.
  2. При сохранении и загрузке из файла считывайте данные не только для отображения в таблице, но и добавляйте их в originalData.

После этого, метод для восстановления исходных записей в таблице может выглядеть так:

private void restoreOriginalDataInTable() { DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setRowCount(0); // очищаем таблицу перед восстановлем данных addTechnicsToTable(originalData); // добавляем все записи из originalData обратно в таблицу }

Вызовите данный метод после необходимых изменений в таблице, чтобы восстановить исходные записи. Не забудьте также обновлять originalData при любых изменениях в таблице, чтобы иметь актуальные данные для восстановления.

Надеюсь, это поможет вам реализовать требуемый функционал.

данные не считываются из файла

Если данные не считываются из файла, то для реализации восстановления исходных данных ве после использования кнопок, вам нужно будет сохранять исходные данные при добавлении их в таблиц.

В вашем методе addTechnicsToTable вы можетеить данные в коллекцию originalData для последующего использования. Вот как может выглядеть обновленный метод:

public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) Car currentCar = (Car) technic; model.addRow(new Object[]{"", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); originalData.add(currentCar); // сохраняем исходные данные в коллекцию originalData } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTr.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); originalData.add(currentTruck); // сохраняем исходные данные в коллекцию originalData } // ... остальные условия для Mobile и PC } }

Таким обом, для восстановления исходных записей в таблицее использования кнопок, вы можете использовать метод restoreOriginalDataInTable, который я предложил ранее.

Если есть другие способы получения или хранения исходных данных, пожалуйста, предоставьте больше информации, чтобы я мог предложитьиболее подходящий подход для вашей ситуации.

restoreOriginalDataInTable напиши его

Конечно, вот метод restoreOriginalDataInTable:

DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setRowCount(0); // очищаем таблицу перед восстановлением данных for (Abstract technic : originalData) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCo()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobileCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } }

Данный метод будет очищать таблицу и добавлять все записи из originalData обратно в таблицу.

Не забудьте также обновлять originalData при любых изменениях в таблице, чтобы иметь актуальные данные для восстановления.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс надежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); originalData.add(currentCar); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); originalData.add(currentTruck); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); originalData.add(currentMobile); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); originalData.add(currentPC); } } } private void restoreOriginalDataInTable() { DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setRowCount(0); // очищаем таблицу перед восстановлением данных for (Abstract technic : originalData) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } }

}

private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано }

}

private boolean getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return true; } else if (falseButton.isSelected()) { return false; } return true; }

private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния

for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = Boolean.parseBoolean(String.valueOf(model.getValueAt(i, 3))); // конвертируем значение в строке в boolean if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { model.removeRow(i); } }

}

}

исправь ошибки

Вы и так уже внесли в код некоторые изменения, но вот ещ несколько исправлений и рекоменаций:

  1. Добавьте приват поле ArrayList<> originalData = new ArrayList<>(); в класс GUI для хранения исходных данных.

  2. В методе saveActionPerformed измените тип второго арга метода JOptionPane.showMessageDialog с JOptionPane.INFORMATION_MESSAGE на JOptionPane.PLAIN_MESSAGE, так как JOptionPane.INFORMATION_MESSAGE вызвать ошибку.

  3. В методе getSelectedConditionFromRadioButtons добавьте возвращение значения по умолчанию (например, true), если ни одна из кнопок не выбрана.

  4. Проверьте импорты классов чтобы убедиться, что они правильные, особно в связи с использованием различных классов ``, Car, Truck, Mobile, PC. Убедитесь, что о загружены из правильного пакета.

  5. Добавьте обработку исключения при создании объекта FileWriter в методе saveActionPerformed.

  6. Проверьте, импортирован правильно класс FileWriter (из пакет java.io.FileWriter), так как вы пишете путь в стилеС Windows (например, "C:/Users/user/Desktop/L_O_L/Lab9.txt").

Теперь когда вы уже внесли изменения в код, вы можете проверить работу программы, и в случае возникновения ошибок, обратиться к моим рекомендациям для дальнших исправлений.

restoreOriginalDataInTable добавь к этому методу кнопку разделе техника

Конечно, чтобы добавить кнопку в раздел техники, вам нужно сначала создать соответствующий компонент в пользовательском интерфейсе, а затем добавить слушателя событий для этой кнопки.от как вы можете это сделать:

1.айте новую кнопку в разделе техки, например "Восстановить данные". 2. Добавьте слушателя событий для этойки, который будет вызывать метод restoreOriginalDataInTable.

Пример кода:

JMenuItem restoreItem = new JMenuItem("Восстановить данные"); TecMenu.add(restoreItem); restoreItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { restoreOriginalDataInTable(); } });

Этоит новую кнопку "Восстановить данные" раздел техники и привяжет к ней метод restoreOriginalDataInTable, который будет восстанавливать исходные данные в таблице.

Надеюсь, это поможет!

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; ArrayList<Abstract> originalData = new ArrayList<>(); public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс ненадежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); JMenuItem restoreItem = new JMenuItem("Восстановить данные"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); TecMenu.add(restoreItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); restoreItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { restoreOriginalDataInTable(); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); originalData.add(currentCar); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); originalData.add(currentTruck); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); originalData.add(currentMobile); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); originalData.add(currentPC); } } } private void restoreOriginalDataInTable() { DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setRowCount(0); // очищаем таблицу перед восстановлением данных for (Abstract technic : originalData) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.PLAIN_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано } } private boolean getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return true; } else if (falseButton.isSelected()) { return false; } return true; } private void updateTableBasedOnRadioSelection() { DefaultTableModel model = (DefaultTableModel) table.getModel(); String selectedType = getSelectedTypeFromRadioButtons(); // метод для получения выбранного типа техники boolean selectedCondition = getSelectedConditionFromRadioButtons(); // метод для получения выбранного состояния for (int i = model.getRowCount() - 1; i >= 0; i--) { String type = (String) model.getValueAt(i, 0); boolean condition = Boolean.parseBoolean(String.valueOf(model.getValueAt(i, 3))); // конвертируем значение в строке в boolean if (!type.equalsIgnoreCase(selectedType) || condition != selectedCondition) { model.removeRow(i); } } }

}

исправь код так, чтобы из оригинальной таблицы подгружались данные согласно выбору в рабочую таблицу

Чтобы оригинальные данные подгружались в рабочую таблицу в соответствии с выбором, вам необходимо добавить кнопку под названием "restoreItem" внутри раздела "Техника". Ниже приведен модифицированный код для добавления кнопки в соответствующее место:

TecMenu.add(restoreItem); Tec.add(delItem); // добавьте это после восстановления данных restoreItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { restoreOriginalDataInTable(); } });

После внесения этих изменений, после нажатия на кнопку "Техника" в меню будет доступна опция "Восстановить данные". В случае еще вопросов или дополнительной помощи, пожалуйста, не стесняйтесь обратить.

эта кнопка уже есть! Перепиши код, чтобы всегда шла подгрузка из оригинальной таблицы в рабочую, по выбору нужных кнопок

Понял, для того обеспечить подгрузку данных из оригинальной таблицы в рабочую в соответствии с выбором кнопок, необходимо модифицировать метод updateTableBasedOnRadioSelection(). Привожу исправленный код ниже:

private void updateTableBasedOnRadioSelection() { DefaultTableModel workTableModel = (DefaultTableModel) table.getModel(); workTableModel.setRowCount(0); // очищаем рабочую таблицу перед обновлением String selectedType getSelectedTypeFromRadioButtons(); boolean selectedCondition = getSelectedConditionFromRadioButtons(); for (Abstract technic : originalData) { if ((selectedType.isEmpty() || technic.getClass().getSimpleName().equalsIgnoreCase(selectedType)) && (selectedCondition == technic.getCondition())) { if (technic instanceof Car) { Car currentCar = (Car) technic; workTableModel.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; workTableModel.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; workTableModel.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; workTableModel.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } }

Используя этот улучшенный метод, теперь данные из оригинальной таблицы будут загружаться в рабочую таблицу в соответствии с выбранными кнопк типа и состояния техники.

сделай так, чтобы можно было добавлять несколько типов

Для того чтобы добавить возможность выбора нескольких типов, вы можете зенить использование JRadioButton на JCheckBox. Пользователь сможет выбрать несколько типов техники одновременно.

Вместе с этим, вам нужно изменить логику обработки выбораехники. Сейчас вы используете для каждой радиокнопки, но при использовании флажков вам нужно будет изменить этот подход и обрабатывать выбор сразускольких типов.

После весения этих изменений, ваш метод updateTableBasedOnRadioSelection() должен будет быть адаптирован для учета нескольких выбранных типов для фильтрации для рабочей таблицы.

исправь на JCheckBox

Вот пример, как можно изменить ваш код для использования JCheckBox вместо JRadioButton:

private JCheckBox carCheckBox; private JCheckBox truckCheckBox; private JCheckBox mobileCheckBox; private JCheckBox pcCheckBox; // ... carCheckBox = new JCheckBox("Легковая машина"); truckCheckBox = new JCheckBox("Грузовик"); mobileCheckBox = new JCheckBox("Мобильное устройство"); pcCheckBox = new JCheckBox("ПК"); // ... carCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableOnCheckboxSelection(); } }); // ... (аналогично для остальных флажков)

Затем вы можете создать метод updateTableBasedOnCheckboxSelection(), который будет обрабатывать выбранные флажки и обновлять рабочую таблицу в соответствии с выбором.

измени мой код под JCheckBox

Конечно! Вот пример, как можно изменить ваш код для использования JCheckBox вместо JRadioButton:

private J carCheckBox; private JCheckBox truckCheckBox; private JCheckBox mobileCheckBox; private JCheckBox pcCheckBox; public GUI() { // ... (остальной ваш текущий код) carCheckBox = new JCheckBox("Легковая машина truckCheckBox = new JCheckBox("Грузовик mobileCheckBox = new JCheckBox("Мобильное устройство"); pcCheckBox = new JCheckBox("ПК"); carCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); // ... (аналогично для остальных флажков) setVisible(true); }

Зем вы можете создать метод updateTableBasedOnCheckboxSelection(), который будетрабатывать выбранные флажки иновлять рабочую таблицу в соответии с выбором

напиши метод updateTableBasedOnCheckboxSelection();

Конечно! Вот пример метода updateTableBasedOnCheckboxSelection() с использованием JCheckBox:

private void updateTableBasedOnCheckboxSelection() { DefaultTableModel workTableModel = () table.getModel(); workTableModel.setRowCount(0); // очищаем рабочую таблицу перед обновлением boolean showCars = carCheckBox.isSelected(); boolean showTrucks = truckCheckBox.isSelected(); boolean showMobiles = mobileCheckBox.isSelected(); boolean showPCs = pcCheckBox.isSelected(); for (Abstract technic : originalData) { if ((showCars && technic instanceof Car) || (showTrucks && technic instanceof Truck) || (showMobiles && technic instanceof Mobile) || (showPCs && technic instanceof PC)) { // Показываем только тот тип техники, который выбран в флажке if (technic.getCondition().equals("new")) { // Проверяем состояние, можете использовать ваше собственное условие if (technic instanceof Car) { Car currentCar = (Car) technic; workTableModel.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; workTableModel.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; workTableModel.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; workTableModel.addRow(new Object[]{"PC", current.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } } }

Этот метод будет выбирать только те типы техники, которые соответствуют выбранным флажкам, и обновлять рабочую таблицу в соответствии с выбором.

package lab9;

import javax.swing.; import javax.swing.table.DefaultTableModel; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import lab9.Techic.Abstract; import lab9.Techic.Car; import lab9.Techic.Mobile; import lab9.Techic.PC; import lab9.Techic.Truck;

public class GUI extends JFrame {

private JTable table; private JRadioButton carButton; private JRadioButton truckButton; private JRadioButton mobileButton; private JRadioButton pcButton; private JRadioButton trueButton; private JRadioButton falseButton; private JCheckBox carCheckBox; private JCheckBox truckCheckBox; private JCheckBox mobileCheckBox; private JCheckBox pcCheckBox; ArrayList<Abstract> originalData = new ArrayList<>(); public GUI() { super("Ара Сервис"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1000, 600); setLocationRelativeTo(null); DefaultTableModel model = new DefaultTableModel(); model.addColumn("Тип"); model.addColumn("Марка"); model.addColumn("Модель"); model.addColumn("Состояние"); model.addColumn("Индекс ненадежности"); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenu TecMenu = new JMenu("Техника"); JMenuItem saveItem = new JMenuItem("Сохранить в файл"); JMenuItem addItem = new JMenuItem("Добавить технику"); JMenuItem delItem = new JMenuItem("Убить технику"); JMenuItem restoreItem = new JMenuItem("Восстановить данные"); fileMenu.add(saveItem); TecMenu.add(addItem); TecMenu.add(delItem); TecMenu.add(restoreItem); menuBar.add(TecMenu); menuBar.add(fileMenu); setJMenuBar(menuBar); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveActionPerformed(e); // изменено на saveActionPerformed } }); JButton exitButton = new JButton("Выход"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); restoreItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { restoreOriginalDataInTable(); } }); add(exitButton, BorderLayout.SOUTH); carButton = new JRadioButton("Легковая машина"); truckButton = new JRadioButton("Грузовик"); mobileButton = new JRadioButton("Мобильное устройство"); pcButton = new JRadioButton("ПК"); trueButton = new JRadioButton("true"); falseButton = new JRadioButton("false"); JPanel radioPanel = new JPanel(); radioPanel.add(carButton); radioPanel.add(truckButton); radioPanel.add(mobileButton); radioPanel.add(pcButton); radioPanel.add(trueButton); radioPanel.add(falseButton); carCheckBox = new JCheckBox("Легковая машина"); truckCheckBox = new JCheckBox("Грузовик"); mobileCheckBox = new JCheckBox("Мобильное устройство"); pcCheckBox = new JCheckBox("ПК"); carCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); truckCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); mobileCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); pcCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); add(radioPanel, BorderLayout.NORTH); carButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); truckButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); mobileButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); pcButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); trueButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); falseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateTableBasedOnRadioSelection(); } }); setVisible(true); } public void addTechnicsToTable(ArrayList<Abstract> technics) { DefaultTableModel model = (DefaultTableModel) table.getModel(); for (Abstract technic : technics) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); originalData.add(currentCar); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); originalData.add(currentTruck); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); originalData.add(currentMobile); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); originalData.add(currentPC); } } } private void restoreOriginalDataInTable() { DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setRowCount(0); // очищаем таблицу перед восстановлением данных for (Abstract technic : originalData) { if (technic instanceof Car) { Car currentCar = (Car) technic; model.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; model.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; model.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; model.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } private void saveActionPerformed(java.awt.event.ActionEvent evt) { // Изменено с SaveActionPerformed на saveActionPerformed DefaultTableModel model = (DefaultTableModel) table.getModel(); try { FileWriter file = new FileWriter("C:/Users/user/Desktop/L_O_L/Lab9.txt"); PrintWriter pw = new PrintWriter(file); for (int i = 0; i < model.getRowCount(); i++) { // Изменено с model.getDataVectorsize() на model.getRowCount() pw.println(model.getValueAt(i, 0) + " " + model.getValueAt(i, 1) + " " + model.getValueAt(i, 2) + " " + model.getValueAt(i, 3) + " " + model.getValueAt(i, 4)); } pw.close(); JOptionPane.showMessageDialog(null, "Данные успешно сохранены в файл 'Lab9.txt'!", "Успешно", JOptionPane.PLAIN_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении данных: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } private String getSelectedTypeFromRadioButtons() { if (carButton.isSelected()) { return "Car"; } else if (truckButton.isSelected()) { return "Truck"; } else if (mobileButton.isSelected()) { return "Mobile"; } else if (pcButton.isSelected()) { return "PC"; } else { return ""; // Возвращаем значение по умолчанию, если ничего не выбрано } } private boolean getSelectedConditionFromRadioButtons() { if (trueButton.isSelected()) { return true; } else if (falseButton.isSelected()) { return false; } return true; } private void updateTableBasedOnRadioSelection() { DefaultTableModel workTableModel = (DefaultTableModel) table.getModel(); workTableModel.setRowCount(0); // очищаем рабочую таблицу перед обновлением String selectedType = getSelectedTypeFromRadioButtons(); boolean selectedCondition = getSelectedConditionFromRadioButtons(); for (Abstract technic : originalData) { if ((selectedType.isEmpty() || technic.getClass().getSimpleName().equalsIgnoreCase(selectedType)) && (selectedCondition == technic.getCondition())) { if (technic instanceof Car) { Car currentCar = (Car) technic; workTableModel.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; workTableModel.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; workTableModel.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; workTableModel.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } } private void updateTableBasedOnCheckboxSelection() { DefaultTableModel workTableModel = (DefaultTableModel) table.getModel(); workTableModel.setRowCount(0); // очищаем рабочую таблицу перед обновлением boolean showCars = carCheckBox.isSelected(); boolean showTrucks = truckCheckBox.isSelected(); boolean showMobiles = mobileCheckBox.isSelected(); boolean showPCs = pcCheckBox.isSelected(); for (Abstract technic : originalData) { if ((showCars && technic instanceof Car) || (showTrucks && technic instanceof Truck) || (showMobiles && technic instanceof Mobile) || (showPCs && technic instanceof PC)) { // Показываем только тот тип техники, который выбран в флажке if (technic.getCondition().equals("new")) { // Проверяем состояние, можете использовать ваше собственное условие if (technic instanceof Car) { Car currentCar = (Car) technic; workTableModel.addRow(new Object[]{"Car", currentCar.getBrand(), currentCar.getModel(), currentCar.getCondition(), currentCar.getCoef()}); } else if (technic instanceof Truck) { Truck currentTruck = (Truck) technic; workTableModel.addRow(new Object[]{"Truck", currentTruck.getBrand(), currentTruck.getModel(), currentTruck.getCondition(), currentTruck.getCoef()}); } else if (technic instanceof Mobile) { Mobile currentMobile = (Mobile) technic; workTableModel.addRow(new Object[]{"Mobile", currentMobile.getBrand(), currentMobile.getModel(), currentMobile.getCondition(), currentMobile.getCoef()}); } else if (technic instanceof PC) { PC currentPC = (PC) technic; workTableModel.addRow(new Object[]{"PC", currentPC.getBrand(), currentPC.getModel(), currentPC.getCondition(), currentPC.getCoef()}); } } } } }

}

Код, который вы предоставли, представляет собой графический интерфейс (GUI) на языке Java, который работает с курсовым проектом. Он включает в себя таблицу, кнопки, радиокнопки, переключатели и выпадающее меню.

GUI отображает информацию о технике (легковые машины, грузовики, мобильные устройства и ПК) и обновляет таблицу в соответствии с выбранными параметрами.

Также присутствуют функции для сохранения данных в файл, восстановления данных, добавления и удаления информации о технике.

Если у вас есть конкретные вопросы или запросы относительно этого кода, пожалуйста, укажите их, и я постараюсь помочь!

подключи в нем JCheckBox за место радиокнопок

Конечно! Вот пример, как можно изменить ваш код использования JCheckBox вместо JRadioButton:

private JCheckBox carCheckBox; private JCheckBox truckCheckBox; private JCheckBox mobileCheckBox; private JCheckBox pcCheckBox; public GUI() { // ... (остальной ваш текущий код) carCheckBox = new JCheckBox("Легковая машина truckCheckBox = new JCheckBox("Грузовик"); mobileCheckBox new JCheckBox("Мобильное устройство"); pcCheckBox = new JCheckBox("ПК"); carCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); // ... (аналогично длястальных флажков) setVisible(true); }

Затем вы можете создать метод updateTableBasedOnCheckboxSelection(), который будетрабатывать выбранные флажки и обновлять рабочую таблицу в соответствии с выбором.

carCheckBox = new JCheckBox("Легковая машина"); truckCheckBox = new JCheckBox("Грузовик"); mobileCheckBox = new JCheckBox("Мобильное устройство"); pcCheckBox = new JCheckBox("ПК"); carCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); truckCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); mobileCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } }); pcCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { updateTableBasedOnCheckboxSelection(); } });

подключи это к jframe

Конечно, чтобы подключить созданные флажки к JFrame, вам нужно добавить их на пель и добавить эту панель на ваш JFrame. Вот пр того, как вы можете это сделать:

public class GUI extends JFrame { private JCheckBox carCheckBox; private JCheckBox truckCheckBox; private JCheckBox mobileCheckBox; private JCheckBox pcCheckBox; public GUI() { JPanel panel = new JPanel(); carCheckBox = new JCheckBox("Легковая машина"); truckCheckBox = new JCheckBox("Говик"); mobileCheckBox = new JCheckBox("Мильное устройство"); pcCheckBox = new JCheckBox("ПК"); carCheckBox.addItemListener(e -> updateTableBasedOnCheckboxSelection()); truckCheckBox.addItemListener(e -> updateTableBasedOnCheckboxSelection()); mobileCheckBox.addItemListener(e ->TableBasedOnCheckboxSelection()); pcCheckBox.addItemListener(e -> updateTableBasedOnCheckboxSelection()); panel.add(carCheckBox); panel.add(truckCheckBox); panel.add(mobileCheckBox); panel.add(pcCheckBox); add(panel); // ... (остальная часть вашего кода) setVisible(true); } // ... (остальные методы вашего класса) public void updateTableBasedOnCheckboxSelection() { // Ваша логика обновления таблицы на основе выбранных флажков } // ... (остальные методы вашего класса) }

В этом примере создается объект JPanel, и все флажки добавляются на этот панель. Затеманель добавляется на JFrame.

нет переменной panel

Прошу прощения за путаницу.авайте добавим созданные флажкирямую на JFram вместоания панели.от как это можно сделать:

public class GUI extends JFrame { private JCheckBox carCheckBox; private JCheckBox truckCheckBox; private JCheckBox mobileCheckBox; private JCheckBox pcCheckBox; public GUI() { carCheckBox = new JCheckBox("Легковая машина"); truckCheckBox = new JCheckBoxГрузовик"); mobileCheckBox = new JCheckBox("Мобильное устройство"); pcCheckBox = new JCheckBox("ПК"); car.addItemListener(e -> updateTableBasedOnCheckboxSelection()); truckCheckBox.addItemListener(e -> updateTableBasedOnCheckboxSelection()); mobileCheckBox.addItemListener(e -> updateTableBasedOnCheckboxSelection()); pcCheckBox.addItemListener(e -> updateTableBasedOnCheckboxSelection()); setLayout(new FlowLayout()); add(carCheckBox); add(truckCheckBox); add(mobileCheckBox); add(pcCheckBox); // ... (остальная часть вашего кода) setVisible(true); } // ... (остальные метод вашего класса) public void updateTableBasedOnCheckboxSelection() { // Ваша логика обновления таблицы на основе выбранных флажков // ... (остальные методы вашего класса) }

В этом коде флажки добавляются непосредственно на JFrame с использованием метода add(). Следовательно,ная panel больше не требуется.