From 7a3fc9d7d437a2d0fb1f55c5f335a994c990374c Mon Sep 17 00:00:00 2001 From: oleg20111511 Date: Thu, 2 Jun 2022 10:53:01 +0300 Subject: [PATCH] Highest yielding tree search task ready --- src/DataTableModel.java | 18 +++++++++ src/MenuActionDeleteColumn.java | 2 +- src/MenuActionDeleteRow.java | 2 +- src/MenuActionFindHighestHarvest.java | 58 +++++++++++++++++++++++++++ src/MenuBar.java | 10 +++-- 5 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 src/MenuActionFindHighestHarvest.java diff --git a/src/DataTableModel.java b/src/DataTableModel.java index ba0b748..34c8bd5 100644 --- a/src/DataTableModel.java +++ b/src/DataTableModel.java @@ -1,5 +1,6 @@ import javax.swing.*; import javax.swing.table.AbstractTableModel; +import java.awt.*; public class DataTableModel extends AbstractTableModel { @@ -130,6 +131,23 @@ public class DataTableModel extends AbstractTableModel { this.fireTableStructureChanged(); } + public Point getMostProductiveCellPos(String treeName) { + double maxHarvest = -1; + Point targetPos = new Point(-1, -1); + // Go through all cells in table + for (int row = 0; row < getRowCount(); row++) { + for (int col = 0; col < getColumnCount(); col++) { + Data cell = rowData[row][col]; + // 1) Check if cell contains target tree + // 2) Compare tree output with max, save if higher + if (cell.getTree().equals(treeName) && cell.getHarvest() > maxHarvest) { + maxHarvest = cell.getHarvest(); + targetPos.setLocation(col, row); + } + } + } + return targetPos; + } public String[] getColumnNames() { return columnNames; diff --git a/src/MenuActionDeleteColumn.java b/src/MenuActionDeleteColumn.java index cef6a75..0c8a222 100644 --- a/src/MenuActionDeleteColumn.java +++ b/src/MenuActionDeleteColumn.java @@ -34,7 +34,7 @@ public class MenuActionDeleteColumn implements ActionListener { ); // Canceled by user - if (result == JOptionPane.CLOSED_OPTION || result == 2) { + if (result == JOptionPane.CLOSED_OPTION || result == 1) { return; } diff --git a/src/MenuActionDeleteRow.java b/src/MenuActionDeleteRow.java index a881dc4..1b78bb3 100644 --- a/src/MenuActionDeleteRow.java +++ b/src/MenuActionDeleteRow.java @@ -34,7 +34,7 @@ public class MenuActionDeleteRow implements ActionListener { ); // Canceled by user - if (result == JOptionPane.CLOSED_OPTION || result == 2) { + if (result == JOptionPane.CLOSED_OPTION || result == 1) { return; } diff --git a/src/MenuActionFindHighestHarvest.java b/src/MenuActionFindHighestHarvest.java new file mode 100644 index 0000000..5e982f4 --- /dev/null +++ b/src/MenuActionFindHighestHarvest.java @@ -0,0 +1,58 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.PrintStream; +import java.io.UnsupportedEncodingException; + +public class MenuActionFindHighestHarvest implements ActionListener { + private DataTableModel tableModel; + + public MenuActionFindHighestHarvest(DataTableModel tableModel) { + this.tableModel = tableModel; + } + + public void actionPerformed(ActionEvent e) { + System.out.println("Find highest harvest"); + + Object[] options = {"Поиск", "Отмена"}; + + JPanel panel = new JPanel(); + panel.add(new JLabel("Введите название дерева")); + + JTextField textField = new JTextField(20); + panel.add(textField); + + int result = JOptionPane.showOptionDialog( + null, + panel, + "Введите название дерева", + JOptionPane.YES_NO_OPTION, + JOptionPane.PLAIN_MESSAGE, + null, + options, + null + ); + + // Canceled by user + if (result == JOptionPane.CLOSED_OPTION || result == 1) { + return; + } + + // Process user response + Point highestProductiveCellPos = tableModel.getMostProductiveCellPos(textField.getText()); + + // Check if search was successful + String text; + if (highestProductiveCellPos.x != -1 && highestProductiveCellPos.y != -1) { + // Success + text = String.format("Строка: %d\nСтолбец: %d", highestProductiveCellPos.y + 1, highestProductiveCellPos.x + 1); + } else { + // Fail + text = "Не удалось найти деревья с таким названием"; + } + + // Display the result + JOptionPane.showMessageDialog(null, text); + } +} diff --git a/src/MenuBar.java b/src/MenuBar.java index 27c291f..c732cb1 100644 --- a/src/MenuBar.java +++ b/src/MenuBar.java @@ -45,11 +45,15 @@ public class MenuBar extends JMenuBar { // Create main menu JMenu menu = new JMenu("Меню"); + menu.add(addMenu); + menu.add(deleteMenu); -// menu.add(createAddRowColItem()); -// menu.add(createRemoveRowColItem()); - menu.add(createMockMenuItem("Макс Урожай")); + + JMenuItem highestHarvestItem = new JMenuItem("Макс урожай"); + highestHarvestItem.addActionListener(new MenuActionFindHighestHarvest(tableModel)); + menu.add(highestHarvestItem); + menu.add(createMockMenuItem("Средн Урожай")); menu.add(createMockMenuItem("Общий урожай")); menu.add(createMockMenuItem("Lin Spec"));