PIbd-22_Chernyshev_G.J._29_.../Trolleybus/FormBusesCollection.java
2023-12-01 19:42:28 +03:00

271 lines
10 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package Trolleybus;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
public class FormBusesCollection {
private final BusesGenericStorage _storage;
private QueueBusesCollection<DrawingBus> _queueCollection;
private JFrame frameBusesCollection;
private JPanel panelBusesCollection, panelTools, panelSets;
private JButton buttonAddBus, buttonRemoveBus, buttonRefreshCollection, buttonAddSet, buttonDelSet, buttonQueue;
private JTextField positionTextField, nameOfSetTextField; //поля ввода
private JList<String> listBoxSets;
private DefaultListModel<String> listBoxModel; //модель для получения/редактирования записей listBoxSets
public FormBusesCollection() {
InitializeComponent();
_storage = new BusesGenericStorage(panelBusesCollection.getWidth(), panelBusesCollection.getHeight());
_queueCollection = new QueueBusesCollection<>();
}
private void InitializeComponent() {
//Само окно
frameBusesCollection = new JFrame("Набор автобусов");
frameBusesCollection.setLayout(new BorderLayout());
frameBusesCollection.setSize(900, 600);
frameBusesCollection.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Панель, на которой отрисовывается набор автобусов/троллейбусов
panelBusesCollection = new JPanel();
//Панель, с помощью которой изменяется набор
panelTools = new JPanel();
panelTools.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panelTools.setLayout(null);
panelTools.setPreferredSize(new Dimension(170, 600));
//Панель для работы с наборами
panelSets = new JPanel();
panelSets.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panelSets.setLayout(null);
panelSets.setBounds(10, 10, 150, 300);
//Кнопки панели panelTools
buttonAddBus = new JButton("Добавить автобус");
buttonAddBus.setBounds(10, 320, 150, 40);
buttonRemoveBus = new JButton("Удалить автобус");
buttonRemoveBus.setBounds(10, 410, 150, 40);
buttonRefreshCollection = new JButton("Обновить коллекцию");
buttonRefreshCollection.setBounds(10, 460, 150, 40);
buttonQueue = new JButton("Очередь");
buttonQueue.setBounds(10, 510, 150, 40);
//Элементы панели panelSets
buttonAddSet = new JButton("Добавить набор");
buttonAddSet.setBounds(10, 50, 130, 30);
listBoxModel = new DefaultListModel<>();
listBoxSets = new JList<>(listBoxModel);
listBoxSets.setBounds(10, 90, 130, 100);
buttonDelSet = new JButton("Удалить набор");
buttonDelSet.setBounds(10, 200, 130, 30);
//Добавление листенеров к кнопкам
buttonAddBus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonAddBus_Click(e);
}
});
buttonRemoveBus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonRemoveBus_Click(e);
}
});
buttonRefreshCollection.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonRefreshCollection_Click(e);
}
});
buttonAddSet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonAddSet_Click(e);
}
});
buttonDelSet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonDelSet_Click(e);
}
});
buttonQueue.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonQueue_Click(e);
}
});
// Листенер изменения индекса в списке
listBoxSets.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (listBoxSets.getSelectedIndex() == -1) {
return;
}
BusesGenericCollection<DrawingBus, DrawingObjectBus> obj = _storage.Get(listBoxSets.getSelectedValue());
if (obj == null) {
return;
}
obj.ShowBuses(panelBusesCollection);
}
});
//Поля ввода
positionTextField = new JTextField();
positionTextField.setBounds(10, 370, 150, 30);
nameOfSetTextField = new JTextField();
nameOfSetTextField.setBounds(10, 10, 130, 30);
//Добавление элементов на панель panelTools
panelTools.add(panelSets);
panelTools.add(buttonAddBus);
panelTools.add(positionTextField);
panelTools.add(buttonRemoveBus);
panelTools.add(buttonRefreshCollection);
panelTools.add(buttonQueue);
//Добавление элементов на панель panelSets
panelSets.add(nameOfSetTextField);
panelSets.add(buttonAddSet);
panelSets.add(buttonDelSet);
panelSets.add(listBoxSets);
frameBusesCollection.add(panelBusesCollection, BorderLayout.CENTER);
frameBusesCollection.add(panelTools, BorderLayout.EAST);
frameBusesCollection.setVisible(true);
}
private void buttonAddBus_Click(ActionEvent e) {
FormTrolleybus form = new FormTrolleybus();
if (listBoxSets.getSelectedIndex() == -1)
{
return;
}
BusesGenericCollection<DrawingBus, DrawingObjectBus> obj = _storage.Get(listBoxSets.getSelectedValue());
if (obj == null)
{
return;
}
//Листенер для кнопки выбора автобуса на той форме
form.buttonSelect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DrawingBus SelectedBus = form.getBus();
if (obj.Add(SelectedBus) != -1)
{
JOptionPane.showMessageDialog(null, "Объект добавлен");
obj.ShowBuses(panelBusesCollection);
}
else
{
JOptionPane.showMessageDialog(null, "Не удалось добавить объект");
}
form.getFrame().dispose();
}
});
}
private void buttonRemoveBus_Click(ActionEvent e) {
if (listBoxSets.getSelectedIndex() == -1)
{
return;
}
BusesGenericCollection<DrawingBus, DrawingObjectBus> obj = _storage.Get(listBoxSets.getSelectedValue());
if (obj == null)
{
return;
}
String pos_string = positionTextField.getText();
//Если строка не заполнена (имеет то же значение, что и пустая строка), то считаем, что ввели 0
if (pos_string.compareTo(" ") == 0) {
pos_string = "0";
}
int pos;
//Могли ввести не цифры
try {
pos = Integer.parseInt(pos_string);
}
//Если ввели не цифры, то тоже считаем, что ввели 0
catch(Exception ex) {
pos = 0;
}
// Добавление удаляемого автобуса в очередь перед самим удалением
_queueCollection.Push(obj.Get(pos));
if (obj.Remove(pos)) {
JOptionPane.showMessageDialog(null, "Объект удален");
obj.ShowBuses(panelBusesCollection);
}
else {
JOptionPane.showMessageDialog(null, "Не удалось удалить объект");
}
}
private void buttonRefreshCollection_Click(ActionEvent e) {
if (listBoxSets.getSelectedIndex() == -1)
{
return;
}
BusesGenericCollection<DrawingBus, DrawingObjectBus> obj = _storage.Get(listBoxSets.getSelectedValue());
if (obj == null) {
return;
}
obj.ShowBuses(panelBusesCollection);
}
private void buttonAddSet_Click(ActionEvent e) {
String name = nameOfSetTextField.getText();
if (name == null || name.trim().length() == 0) {
return;
}
_storage.AddSet(nameOfSetTextField.getText());
ReloadObjects();
}
private void buttonDelSet_Click(ActionEvent e) {
if (listBoxSets.getSelectedIndex() == -1) {
return;
}
_storage.DelSet(listBoxSets.getSelectedValue());
ReloadObjects();
}
private void buttonQueue_Click(ActionEvent e) {
// Если в очередь ничего не добавили, то новую форму открывать не надо
if (_queueCollection.Size() == 0) {
JOptionPane.showMessageDialog(null, "Очередь пустая");
return;
}
FormTrolleybus form = new FormTrolleybus();
// Вывод в форме первого в очереди объекта и удаление его из очереди
form.ShowBus(_queueCollection.Pop());
}
private void ReloadObjects() {
int index = listBoxSets.getSelectedIndex();
listBoxModel.clear();
List<String> keys = _storage.Keys();
for (int i = 0; i < keys.size(); i++) {
listBoxModel.addElement(keys.get(i));
}
if (listBoxModel.size() > 0 && (index == -1 || index >= listBoxModel.size())) {
listBoxSets.setSelectedIndex(0);
}
else if (listBoxModel.size() > 0) {
listBoxSets.setSelectedIndex(index);
}
}
}