2023-11-04 14:33:13 +04:00
|
|
|
|
import javax.swing.*;
|
2023-11-28 17:55:40 +04:00
|
|
|
|
import javax.swing.event.ListSelectionEvent;
|
|
|
|
|
import javax.swing.event.ListSelectionListener;
|
2023-12-17 17:20:41 +04:00
|
|
|
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
2023-11-04 14:33:13 +04:00
|
|
|
|
import java.awt.*;
|
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
|
import java.awt.event.ActionListener;
|
2023-11-28 17:55:40 +04:00
|
|
|
|
import java.awt.image.CropImageFilter;
|
2023-12-17 17:20:41 +04:00
|
|
|
|
import java.io.File;
|
2023-11-28 17:55:40 +04:00
|
|
|
|
import java.util.LinkedList;
|
|
|
|
|
import java.util.PriorityQueue;
|
|
|
|
|
import java.util.Queue;
|
2023-11-04 14:33:13 +04:00
|
|
|
|
|
|
|
|
|
class CollectionFrame extends JComponent {
|
2023-11-28 17:55:40 +04:00
|
|
|
|
private final CarsGenericStorage _tanksStorage;
|
|
|
|
|
private final GarageFrame frame;
|
|
|
|
|
private Queue<DrawTanker> removedTankers;
|
2023-11-04 14:33:13 +04:00
|
|
|
|
protected final int Width;
|
|
|
|
|
protected final int Height;
|
2023-11-28 17:55:40 +04:00
|
|
|
|
public CollectionFrame(int width, int height, GarageFrame fr)
|
2023-11-04 14:33:13 +04:00
|
|
|
|
{
|
|
|
|
|
Width = width;
|
|
|
|
|
Height = height;
|
2023-11-28 17:55:40 +04:00
|
|
|
|
_tanksStorage = new CarsGenericStorage(Width, Height);
|
|
|
|
|
frame = fr;
|
|
|
|
|
removedTankers = new LinkedList<>();
|
2023-11-04 14:33:13 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void paintComponent(Graphics g) {
|
|
|
|
|
super.paintComponent(g);
|
2023-11-28 17:55:40 +04:00
|
|
|
|
if (frame.listStorage.getSelectedIndex() == -1)
|
|
|
|
|
return;
|
|
|
|
|
var obj = _tanksStorage.get(frame.listStorage.getSelectedValue());
|
|
|
|
|
if (obj == null)
|
|
|
|
|
return;
|
|
|
|
|
if (obj.ShowCars() == null)
|
|
|
|
|
return;
|
|
|
|
|
g.drawImage(obj.ShowCars(), 0, 0, this);
|
2023-11-04 14:33:13 +04:00
|
|
|
|
super.repaint();
|
|
|
|
|
}
|
2023-11-28 17:55:40 +04:00
|
|
|
|
|
|
|
|
|
protected void ReloadObjects()
|
|
|
|
|
{
|
|
|
|
|
int index = frame.listStorage.getSelectedIndex();
|
|
|
|
|
frame.listModel.clear();
|
|
|
|
|
for (String key : _tanksStorage.Keys())
|
|
|
|
|
{
|
|
|
|
|
frame.listModel.addElement(key);
|
|
|
|
|
}
|
|
|
|
|
if (!frame.listModel.isEmpty() && (index == -1 || index >= frame.listModel.size()))
|
|
|
|
|
{
|
|
|
|
|
frame.listStorage.setSelectedIndex(0);
|
|
|
|
|
}
|
|
|
|
|
else if (!frame.listModel.isEmpty() && index > -1 && index < frame.listModel.size())
|
|
|
|
|
{
|
|
|
|
|
frame.listStorage.setSelectedIndex(index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
protected void ButtonAddObject_Click()
|
|
|
|
|
{
|
|
|
|
|
String name = frame.nameStorageField.getText();
|
|
|
|
|
if (name.length() == 0)
|
|
|
|
|
return;
|
|
|
|
|
_tanksStorage.AddSet(name);
|
|
|
|
|
ReloadObjects();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void ButtonRemoveObject_Click()
|
|
|
|
|
{
|
|
|
|
|
if (frame.listStorage.getSelectedIndex() == -1)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (JOptionPane.showConfirmDialog(null, "Delete object " + frame.listStorage.getSelectedValue() + "?", "Delete", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
_tanksStorage.DelSet(frame.listStorage.getSelectedValue());
|
|
|
|
|
ReloadObjects();
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-04 14:33:13 +04:00
|
|
|
|
protected void ButtonAddTank_Click()
|
|
|
|
|
{
|
2023-11-28 17:55:40 +04:00
|
|
|
|
if (frame.listStorage.getSelectedIndex() == -1)
|
|
|
|
|
return;
|
|
|
|
|
var obj = _tanksStorage.get(frame.listStorage.getSelectedValue());
|
|
|
|
|
if (obj == null)
|
|
|
|
|
return;
|
2023-11-28 18:10:22 +04:00
|
|
|
|
ConfigFrame form = new ConfigFrame();
|
2023-11-04 14:33:13 +04:00
|
|
|
|
form.setVisible(true);
|
2023-11-28 18:10:22 +04:00
|
|
|
|
form.buttonAdd.addActionListener(
|
2023-11-04 14:33:13 +04:00
|
|
|
|
new ActionListener() {
|
|
|
|
|
public void actionPerformed(ActionEvent e){
|
2023-11-28 18:10:22 +04:00
|
|
|
|
DrawTanker dT = form.Gasoline._tanker;
|
|
|
|
|
if (dT != null && obj.plus(dT) != -1)
|
2023-11-04 14:33:13 +04:00
|
|
|
|
{
|
|
|
|
|
form.dispose();
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
System.out.println("Объект добавлен");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
form.dispose();
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
System.out.println("Не удалось добавить объект");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void ButtonRemoveTank_Click(String text)
|
|
|
|
|
{
|
2023-11-28 17:55:40 +04:00
|
|
|
|
if (frame.listStorage.getSelectedIndex() == -1)
|
|
|
|
|
return;
|
|
|
|
|
var obj = _tanksStorage.get(frame.listStorage.getSelectedValue());
|
|
|
|
|
if (obj == null)
|
|
|
|
|
return;
|
2023-11-04 14:33:13 +04:00
|
|
|
|
if (JOptionPane.showConfirmDialog(null, "Delete Tanker?", "Delete", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION)
|
|
|
|
|
{
|
2023-11-28 17:55:40 +04:00
|
|
|
|
int index = -1;
|
|
|
|
|
DrawTanker deleted = null;
|
|
|
|
|
try {
|
|
|
|
|
deleted = obj.minus(Integer.parseInt(text));
|
|
|
|
|
} catch(NumberFormatException e) {
|
|
|
|
|
}
|
|
|
|
|
if (deleted != null)
|
2023-11-04 14:33:13 +04:00
|
|
|
|
{
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE);
|
2023-11-28 17:55:40 +04:00
|
|
|
|
removedTankers.add(deleted);
|
2023-11-04 14:33:13 +04:00
|
|
|
|
super.repaint();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
super.repaint();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void ButtonUpdate_Click() {super.repaint();}
|
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
protected void ButtonCreateDeleted_Click()
|
|
|
|
|
{
|
|
|
|
|
if (removedTankers.isEmpty())
|
|
|
|
|
return;
|
|
|
|
|
var tank = removedTankers.poll();
|
|
|
|
|
BaseFrame f = new BaseFrame(tank);
|
|
|
|
|
f.setVisible(true);
|
|
|
|
|
}
|
2023-12-17 17:20:41 +04:00
|
|
|
|
|
|
|
|
|
protected void OpenFile_Click()
|
|
|
|
|
{
|
|
|
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
|
|
|
|
|
|
|
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
|
|
|
|
|
|
|
|
|
// Установка фильтра для файлов с определенным расширением (например, .txt)
|
|
|
|
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
|
|
|
|
|
|
|
|
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
|
|
|
|
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
|
|
|
|
|
File selectedFile = fileChooser.getSelectedFile();
|
|
|
|
|
if (_tanksStorage.LoadData(selectedFile.getAbsolutePath())) {
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
} else {
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ReloadObjects();
|
|
|
|
|
}
|
|
|
|
|
protected void SaveFile_Click()
|
|
|
|
|
{
|
|
|
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
|
|
|
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
|
|
|
|
|
|
|
|
|
|
// Установка фильтра для файлов с определенным расширением (например, .txt)
|
|
|
|
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
|
|
|
|
|
|
|
|
|
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
|
|
|
|
File selectedFile = fileChooser.getSelectedFile();
|
|
|
|
|
if (_tanksStorage.SaveData(selectedFile.getAbsolutePath()))
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
else
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
protected void LoadFileSingle_Click()
|
|
|
|
|
{
|
|
|
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
|
|
|
|
|
|
|
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
|
|
|
|
|
|
|
|
|
// Установка фильтра для файлов с определенным расширением (например, .txt)
|
|
|
|
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
|
|
|
|
|
|
|
|
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
|
|
|
|
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
|
|
|
|
|
File selectedFile = fileChooser.getSelectedFile();
|
|
|
|
|
if (_tanksStorage.LoadDataSingle(selectedFile.getAbsolutePath())) {
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
} else {
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ReloadObjects();
|
|
|
|
|
}
|
|
|
|
|
protected void SaveFileSingle_Click(JList<String> jListStorage)
|
|
|
|
|
{
|
|
|
|
|
if (jListStorage.getSelectedValue() == null){
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Не выбран гараж", "Ошибка", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
|
|
|
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
|
|
|
|
|
|
|
|
|
|
// Установка фильтра для файлов с определенным расширением (например, .txt)
|
|
|
|
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
|
|
|
|
|
|
|
|
|
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
|
|
|
|
File selectedFile = fileChooser.getSelectedFile();
|
|
|
|
|
if (_tanksStorage.SaveDataSingle(selectedFile.getAbsolutePath(), jListStorage.getSelectedValue()))
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
else
|
|
|
|
|
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-11-04 14:33:13 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class GarageFrame extends JFrame {
|
|
|
|
|
public GarageFrame()
|
|
|
|
|
{
|
|
|
|
|
initUI();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static final int Width = 1000;
|
|
|
|
|
protected static final int Height = 600;
|
|
|
|
|
CollectionFrame Collection;
|
2023-11-28 17:55:40 +04:00
|
|
|
|
|
|
|
|
|
JButton addTankerButton;
|
|
|
|
|
JTextField indexTankerField;
|
|
|
|
|
JButton deleteTankerButton;
|
|
|
|
|
JButton updateCollectionButton;
|
|
|
|
|
JList<String> listStorage;
|
|
|
|
|
DefaultListModel<String> listModel;
|
|
|
|
|
JButton addCollectionButton;
|
|
|
|
|
JTextField nameStorageField;
|
|
|
|
|
JButton deleteCollectionbutton;
|
|
|
|
|
JButton createDeletedButton;
|
|
|
|
|
|
2023-11-04 14:33:13 +04:00
|
|
|
|
private void initUI()
|
|
|
|
|
{
|
|
|
|
|
setSize(Width, Height);
|
|
|
|
|
setTitle("TankGasoline");
|
|
|
|
|
setLocationRelativeTo(null);
|
|
|
|
|
setLayout(null);
|
|
|
|
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
|
|
|
setResizable(false);
|
|
|
|
|
|
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
addTankerButton = new JButton("Add tanker");
|
2023-11-04 14:33:13 +04:00
|
|
|
|
addTankerButton.setLayout(null);
|
|
|
|
|
addTankerButton.setBounds(Width-200, Height-550, 200, 30);
|
|
|
|
|
add(addTankerButton);
|
|
|
|
|
addTankerButton.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.ButtonAddTank_Click();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
indexTankerField = new JTextField();
|
2023-11-04 14:33:13 +04:00
|
|
|
|
indexTankerField.setBounds(Width- 200, Height-500, 200, 30);
|
|
|
|
|
indexTankerField.setLayout(null);
|
|
|
|
|
add(indexTankerField);
|
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
deleteTankerButton = new JButton("Delete tanker");
|
2023-11-04 14:33:13 +04:00
|
|
|
|
deleteTankerButton.setLayout(null);
|
|
|
|
|
deleteTankerButton.setBounds(Width-200, Height-450, 200, 30);
|
|
|
|
|
add(deleteTankerButton);
|
|
|
|
|
deleteTankerButton.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.ButtonRemoveTank_Click(indexTankerField.getText());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
updateCollectionButton = new JButton("Update collection");
|
2023-11-04 14:33:13 +04:00
|
|
|
|
updateCollectionButton.setLayout(null);
|
|
|
|
|
updateCollectionButton.setBounds(Width-200, Height-400, 200, 30);
|
|
|
|
|
add(updateCollectionButton);
|
|
|
|
|
updateCollectionButton.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.ButtonUpdate_Click();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
listModel = new DefaultListModel<>();
|
|
|
|
|
listStorage = new JList<String>(listModel);
|
|
|
|
|
listStorage.setLayout(null);
|
|
|
|
|
listStorage.setBounds(Width - 190, Height - 250, 180, 130);
|
|
|
|
|
add(listStorage);
|
|
|
|
|
listStorage.addListSelectionListener(new ListSelectionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void valueChanged(ListSelectionEvent e) {
|
|
|
|
|
Collection.repaint();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
addCollectionButton = new JButton("Add Collection");
|
|
|
|
|
addCollectionButton.setLayout(null);
|
|
|
|
|
addCollectionButton.setBounds(Width-190, Height - 350, 180, 30);
|
|
|
|
|
add(addCollectionButton);
|
|
|
|
|
addCollectionButton.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.ButtonAddObject_Click();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
nameStorageField = new JTextField();
|
|
|
|
|
nameStorageField.setBounds(Width- 190, Height- 300, 180, 30);
|
|
|
|
|
nameStorageField.setLayout(null);
|
|
|
|
|
add(nameStorageField);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deleteCollectionbutton = new JButton("Remove Collection");
|
|
|
|
|
deleteCollectionbutton.setBounds(Width-190, Height - 100, 180, 30);
|
|
|
|
|
deleteCollectionbutton.setLayout(null);
|
|
|
|
|
add(deleteCollectionbutton);
|
|
|
|
|
deleteCollectionbutton.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.ButtonRemoveObject_Click();
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-11-04 19:58:26 +04:00
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
createDeletedButton = new JButton("Create deleted");
|
|
|
|
|
createDeletedButton.setLayout(null);
|
|
|
|
|
createDeletedButton.setBounds(Width - 200, 10, 200, 30);
|
|
|
|
|
add(createDeletedButton);
|
|
|
|
|
createDeletedButton.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.ButtonCreateDeleted_Click();
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-11-04 19:58:26 +04:00
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
Collection = new CollectionFrame(Width-200, Height, this);
|
2023-11-04 14:33:13 +04:00
|
|
|
|
Collection.setLayout(null);
|
|
|
|
|
Collection.setBounds(0, 0, Width-200, Height);
|
|
|
|
|
add(Collection);
|
|
|
|
|
|
2023-12-17 17:20:41 +04:00
|
|
|
|
JMenuBar menuBar = new JMenuBar();
|
|
|
|
|
JMenu fileMenu = new JMenu("File");
|
|
|
|
|
JMenuItem openItem = new JMenuItem("Open");
|
|
|
|
|
openItem.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.OpenFile_Click();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
JMenuItem saveItem = new JMenuItem("Save");
|
|
|
|
|
saveItem.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.SaveFile_Click();
|
|
|
|
|
}}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
JMenuItem openItemSingle = new JMenuItem("Open single");
|
|
|
|
|
openItemSingle.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.LoadFileSingle_Click();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
JMenuItem saveItemSingle = new JMenuItem("Save single");
|
|
|
|
|
saveItemSingle.addActionListener(new ActionListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
Collection.SaveFileSingle_Click(listStorage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
fileMenu.add(openItem);
|
|
|
|
|
fileMenu.add(saveItem);
|
|
|
|
|
fileMenu.add(openItemSingle);
|
|
|
|
|
fileMenu.add(saveItemSingle);
|
|
|
|
|
|
|
|
|
|
menuBar.add(fileMenu);
|
|
|
|
|
menuBar.setBounds(Width - 50, Height - 70, 50, 20);
|
|
|
|
|
add(menuBar);
|
2023-11-04 14:33:13 +04:00
|
|
|
|
}
|
|
|
|
|
|
2023-11-28 17:55:40 +04:00
|
|
|
|
}
|