271 lines
10 KiB
Java
271 lines
10 KiB
Java
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);
|
||
}
|
||
}
|
||
} |