package gui; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JList; import javax.swing.JTabbedPane; import javax.swing.event.ListSelectionEvent; import events.EntityDrawboxChangedEvent; import events.EntityDrawboxChangedListener; import events.EntityHitboxChangedEvent; import events.EntityHitboxChangedListener; import model.Hitbox; import model.HitboxCircle; import model.HitboxRectangle; import model.Point; import repository.Project; public class HitboxEditor extends Editable { JButton changeInRectangleHitboxJButton; JButton changeInCircleHitboxJButton; HitboxEditor(ListGUI listGUI) { super(listGUI); canvas = new EditableCanvas(); add(canvas); canvas.setHitboxRectengleRenderingFunction(); canvas.setVisible(true); changeInRectangleHitboxJButton = super.createButton("Hitbox Rectangle",null,"res/square.png"); changeInCircleHitboxJButton = super.createButton("Hitbox circle",null,"res/circle.png"); toolbar.add(changeInRectangleHitboxJButton); toolbar.add(changeInCircleHitboxJButton); changeInRectangleHitboxJButton.addActionListener((e)->{ functionClearHitboxJButton(); entity.setHitbox(new HitboxRectangle("Rectangle",entity)); canvas.setHitboxRectengleRenderingFunction(); //Сделать создание нового Hitbox формы Rectengle }); changeInCircleHitboxJButton.addActionListener((e)->{ functionClearHitboxJButton(); entity.setHitbox(new HitboxCircle("Circle",entity)); canvas.setHitboxCircleRenderingFunction(); //Сделать создание нового Hitbox формы Circle }); } public void functionClearHitboxJButton() { if(entity != null) { canvas.renderingFunction.functionClearJButton(); canvas.repaint(); } } //НАДО ДОБАВИТЬ ЧТО БЫ ПОД КОНЕЦ РИСОВАНИЯ ХИТБОКСА ОНО ВЫЗЫВАЛО ФУНКЦИЮ И ВСЕ СОХРАНЯЛО. //СОХРАНЕНИЕ УЖЕ РЕАЛИЗОВАНО. //НО НЕ ДОБАВЛЕН ВЫЗОВ ФУНКЦИИ И НЕ ОФОРМЛЕНА ПОДПИСКА //UPD: вроде подписку оформил в MainGUI; @Override public void valueChanged(ListSelectionEvent e) { if(e.getSource() instanceof JList) { //TODO: надо бы элегантнее пробросить сюда ListGUI - просто передача его в аргументах немножко громоздкая // как-то обыграть это через события? // ps. попытки обратиться к eventSource проваливаются - ListGUI это панель, уже внутри которой лежит JList selectedEntityName = listGUI.getSelectedName(); try { entity = Project.getInstance().getEntityByName(selectedEntityName); image = Project.getInstance().loadImageByName(selectedEntityName); //TODO: if(image == null) вызов FileChooser'a и выбор изображения canvas.setEntity(entity); canvas.setImage(image); if(entity.getHitbox().getShape().equals("Rectangle")) { canvas.setHitboxRectengleRenderingFunction(); } if(entity.getHitbox().getShape().equals("Circle")) { canvas.setHitboxCircleRenderingFunction(); } } catch (Exception e1) { //logger.severe("Entity with name '"+selectedEntityName+"' was not found! Cannot display it on panel!"); } canvas.repaint(); } } }