Done
This commit is contained in:
parent
e3c4b3b319
commit
11e90f1f62
@ -41,7 +41,7 @@ public class CruiserCollectionFrame extends JFrame {
|
||||
return;
|
||||
}
|
||||
CruiserGenericCollection<DrawingCruiser, DrawingObjectCruiser> _cruisers = _storage.Get(listBoxStoragesJList.getSelectedValue());
|
||||
GameFrame form = new GameFrame();
|
||||
FormCruiserConfig form = new FormCruiserConfig();
|
||||
if (form.getSelectedCruiser() != null) {
|
||||
if (_cruisers.plus(_cruisers, form.SelectedCruiser)) {
|
||||
JOptionPane.showMessageDialog(null, "Объект добавлен");
|
||||
|
@ -47,4 +47,7 @@ public class DrawingAdvancedCruiser extends DrawingCruiser{
|
||||
if (wheels == null){return;}
|
||||
wheels.drawWheels(g, _startPosX, _startPosY, brush);
|
||||
}
|
||||
public void ChangeAddColor(Color color) {
|
||||
EntityCruiser.AdditionalColor = color;
|
||||
}
|
||||
}
|
@ -40,7 +40,7 @@ public class DrawingCruiser {
|
||||
return EntityCruiser;
|
||||
}
|
||||
|
||||
protected DrawingCruiser(int speed, double weight, Color bodyColor, int
|
||||
public DrawingCruiser(int speed, double weight, Color bodyColor, int
|
||||
width, int height, int cruiserWidth, int cruiserHeight) {
|
||||
if (width <= _cruiserWidth || height <= _cruiserHeight) {
|
||||
return;
|
||||
@ -144,4 +144,11 @@ public class DrawingCruiser {
|
||||
wheels.drawWheels(g, _startPosX, _startPosY, EntityCruiser.BodyColor);
|
||||
}
|
||||
public IMoveableObject GetMoveableObject(){return new DrawingObjectCruiser(this);}
|
||||
public void ChangeColor(Color color) {
|
||||
EntityCruiser.BodyColor = color;
|
||||
}
|
||||
public void ChangeIDop(IDop obj, String n) {
|
||||
wheels = obj;
|
||||
wheels.setNumOfWheels(n);
|
||||
}
|
||||
}
|
383
FormCruiserConfig.java
Normal file
383
FormCruiserConfig.java
Normal file
@ -0,0 +1,383 @@
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.awt.datatransfer.Transferable;
|
||||
import java.awt.datatransfer.UnsupportedFlavorException;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.io.IOException;
|
||||
public class FormCruiserConfig extends JDialog {
|
||||
public DrawingCruiser drawingCruiser;
|
||||
JPanel cruiserPanel = new JPanel();
|
||||
protected DrawingCruiser SelectedCruiser;
|
||||
protected static JLabel colorLabel = new JLabel("Цвет", 0);
|
||||
protected JLabel colorAddLabel = new JLabel("Доп. цвет", 0);
|
||||
FormCruiserConfig() {
|
||||
setTitle("Cruiser");
|
||||
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
this.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
|
||||
this.setModalityType(ModalityType.APPLICATION_MODAL);
|
||||
this.setResizable(false);
|
||||
setSize(900, 400);
|
||||
setLayout(null);
|
||||
JCheckBox ifTentCheckBox = new JCheckBox("Признак наличия площадки под вертолет");
|
||||
JCheckBox ifKitCheckBox = new JCheckBox("Признак наличия ракетных шахт ");
|
||||
ifTentCheckBox.setBounds(20, 200, 150, 30);
|
||||
this.add(ifTentCheckBox);
|
||||
ifKitCheckBox.setBounds(20, 250, 150, 30);
|
||||
this.add(ifKitCheckBox);
|
||||
JSpinner speedSpinner = new JSpinner();
|
||||
speedSpinner.setBounds(20 + 100, 100, 50, 20);
|
||||
speedSpinner.setValue(100);
|
||||
this.add(speedSpinner);
|
||||
JSpinner weightSpinner = new JSpinner();
|
||||
weightSpinner.setBounds(20 + 100, 150, 50, 20);
|
||||
weightSpinner.setValue(100);
|
||||
this.add(weightSpinner);
|
||||
JLabel speedLabel = new JLabel("Скорость");
|
||||
speedLabel.setBounds(20, 100, 150, 20);
|
||||
this.add(speedLabel);
|
||||
JLabel weightLabel = new JLabel("Вес");
|
||||
weightLabel.setBounds(20, 150, 150, 20);
|
||||
this.add(weightLabel);
|
||||
int xStart = 300;
|
||||
int yStart = 50;
|
||||
int panelColorSize = 50;
|
||||
Color[] colors = {Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.CYAN, Color.BLUE, Color.MAGENTA, Color.PINK};
|
||||
for (int i = 0; i < 2; i++) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
JPanel colorPanel = new JPanel();
|
||||
colorPanel.setTransferHandler(new PanelTransferHandler());
|
||||
colorPanel.addMouseListener(new PanelMouseAdapter());
|
||||
colorPanel.setBackground(colors[i * 4 + j]);
|
||||
colorPanel.setBounds(xStart, yStart, panelColorSize, panelColorSize);
|
||||
this.add(colorPanel);
|
||||
xStart += panelColorSize + 10;
|
||||
}
|
||||
yStart += panelColorSize + 10;
|
||||
xStart -= (4 * panelColorSize + 40);
|
||||
}
|
||||
JLabel easyLabel = new JLabel("Простой", 0);
|
||||
easyLabel.setTransferHandler(new LabelTransferHandler());
|
||||
easyLabel.addMouseListener(new LabelMouseAdapter());
|
||||
easyLabel.setBounds(300, 300, 100, 50);
|
||||
easyLabel.setOpaque(true);
|
||||
easyLabel.setBackground(Color.LIGHT_GRAY);
|
||||
this.add(easyLabel);
|
||||
JLabel hardLabel = new JLabel("Продвинутый", 0);
|
||||
hardLabel.setTransferHandler(new LabelTransferHandler());
|
||||
hardLabel.addMouseListener(new LabelMouseAdapter());
|
||||
hardLabel.setBounds(410, 300, 100, 50);
|
||||
hardLabel.setOpaque(true);
|
||||
hardLabel.setBackground(Color.LIGHT_GRAY);
|
||||
this.add(hardLabel);
|
||||
colorLabel.setTransferHandler(new TransferHandler("background"));
|
||||
colorLabel.setBounds(600, 50, 100, 40);
|
||||
colorLabel.setOpaque(true);
|
||||
Border border = BorderFactory.createLineBorder(Color.BLACK, 1); // Создание границы
|
||||
colorLabel.setBorder(border);
|
||||
this.add(colorLabel);
|
||||
colorAddLabel.setTransferHandler(new TransferHandler("background"));
|
||||
colorAddLabel.setBounds(750, 50, 100, 40);
|
||||
colorAddLabel.setOpaque(true);
|
||||
colorAddLabel.setBorder(border);
|
||||
this.add(colorAddLabel);
|
||||
JLabel iDopLabel = new JLabel("Палубы", 0);
|
||||
iDopLabel.setBounds(680, 10, 100, 30);
|
||||
iDopLabel.setOpaque(true);
|
||||
iDopLabel.setBorder(border);
|
||||
this.add(iDopLabel);
|
||||
colorLabel.setTransferHandler(
|
||||
new TransferHandler() {
|
||||
@Override
|
||||
public boolean canImport(TransferHandler.TransferSupport support) {
|
||||
return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor);
|
||||
}
|
||||
@Override
|
||||
public boolean importData(TransferHandler.TransferSupport support) {
|
||||
if (canImport(support)) {
|
||||
try {
|
||||
Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor);
|
||||
if (drawingCruiser == null)
|
||||
return false;
|
||||
drawingCruiser.ChangeColor(color);
|
||||
colorLabel.setBackground(color);
|
||||
repaintPanel();
|
||||
return true;
|
||||
} catch (UnsupportedFlavorException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
colorAddLabel.setTransferHandler(
|
||||
new TransferHandler() {
|
||||
@Override
|
||||
public boolean canImport(TransferHandler.TransferSupport support) {
|
||||
return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor);
|
||||
}
|
||||
@Override
|
||||
public boolean importData(TransferHandler.TransferSupport support) {
|
||||
if (canImport(support)) {
|
||||
try {
|
||||
Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor);
|
||||
if (drawingCruiser == null || !(drawingCruiser instanceof DrawingAdvancedCruiser))
|
||||
return false;
|
||||
((DrawingAdvancedCruiser) drawingCruiser).ChangeAddColor(color);
|
||||
colorAddLabel.setBackground(color);
|
||||
repaintPanel();
|
||||
return true;
|
||||
} catch (UnsupportedFlavorException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
JSpinner numOfWheelsSpinner = new JSpinner();
|
||||
iDopLabel.setTransferHandler(
|
||||
new TransferHandler() {
|
||||
@Override
|
||||
public boolean canImport(TransferHandler.TransferSupport support) {
|
||||
return support.isDataFlavorSupported(iDopTransferable.iDrawDataFlavor);
|
||||
}
|
||||
@Override
|
||||
public boolean importData(TransferHandler.TransferSupport support) {
|
||||
if (canImport(support)) {
|
||||
try {
|
||||
IDop obj = (IDop) support.getTransferable().getTransferData(iDopTransferable.iDrawDataFlavor);
|
||||
if (drawingCruiser == null)
|
||||
return false;
|
||||
drawingCruiser.ChangeIDop(obj, (String) numOfWheelsSpinner.getValue());
|
||||
repaintPanel();
|
||||
return true;
|
||||
} catch (UnsupportedFlavorException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
JButton deleteButton = new JButton("Отмена");
|
||||
deleteButton.setBounds(750, 300, 100, 30);
|
||||
this.add(deleteButton);
|
||||
JButton buttonCruiser = new JButton("Добавить");
|
||||
buttonCruiser.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
SelectedCruiser = drawingCruiser;
|
||||
dispose();
|
||||
}
|
||||
});
|
||||
buttonCruiser.setBounds(600, 300, 100, 30);
|
||||
this.add(buttonCruiser);
|
||||
JLabel numWheelsLabel = new JLabel("Палубы");
|
||||
numWheelsLabel.setBounds(300, 200, 70, 20);
|
||||
this.add(numWheelsLabel);
|
||||
numOfWheelsSpinner.setValue(3);
|
||||
numOfWheelsSpinner.setBounds(370, 200, 40, 20);
|
||||
this.add(numOfWheelsSpinner);
|
||||
IDopComponent triangleLComp = new IDopComponent(new DopClassMixed(3));
|
||||
JLabel triangleLabel = new JLabel("1 вид", 0);
|
||||
triangleLComp.add(triangleLabel);
|
||||
triangleLComp.setBounds(300, 250, 20, 20);
|
||||
triangleLComp.setBorder(border);
|
||||
this.add(triangleLComp);
|
||||
IDopComponent rectComp = new IDopComponent(new DopClassRect(3));
|
||||
JLabel rectLabel = new JLabel("2 вид", 0);
|
||||
rectComp.add(rectLabel);
|
||||
rectComp.setBounds(330, 250, 20, 20);
|
||||
rectComp.setBorder(border);
|
||||
this.add(rectComp);
|
||||
IDopComponent circleComp = new IDopComponent(new NumberOfWheels(3));
|
||||
JLabel circleLabel = new JLabel("3 вид", 0);
|
||||
circleComp.add(circleLabel);
|
||||
circleComp.setBounds(360, 250, 20, 20);
|
||||
circleComp.setBorder(border);
|
||||
this.add(circleComp);
|
||||
|
||||
cruiserPanel.setTransferHandler(
|
||||
new TransferHandler() {
|
||||
@Override
|
||||
public boolean canImport(TransferHandler.TransferSupport support) {
|
||||
return support.isDataFlavorSupported(DataFlavor.stringFlavor);
|
||||
}
|
||||
@Override
|
||||
public boolean importData(TransferHandler.TransferSupport support) {
|
||||
if (canImport(support)) {
|
||||
try {
|
||||
int speed = ((Number) speedSpinner.getValue()).intValue();
|
||||
int weight = ((Number) weightSpinner.getValue()).intValue();
|
||||
int enginesNumber = ((Number) numOfWheelsSpinner.getValue()).intValue();
|
||||
|
||||
switch ((String) support.getTransferable().getTransferData(DataFlavor.stringFlavor)) {
|
||||
case "Простой" -> {
|
||||
drawingCruiser = new DrawingCruiser(speed, weight, Color.WHITE,
|
||||
cruiserPanel.getWidth(), cruiserPanel.getHeight(), 0, enginesNumber);
|
||||
}
|
||||
case "Продвинутый" -> {
|
||||
drawingCruiser = new DrawingAdvancedCruiser(speed, (double) weight, Color.WHITE, Color.BLACK,
|
||||
ifKitCheckBox.isSelected(), ifTentCheckBox.isSelected(), true, cruiserPanel.getWidth(), cruiserPanel.getHeight());
|
||||
}
|
||||
|
||||
}
|
||||
drawingCruiser.SetPosition(10, 10);
|
||||
|
||||
repaintPanel();
|
||||
return true;
|
||||
} catch (UnsupportedFlavorException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
cruiserPanel.setBounds(600, 100, 250, 190);
|
||||
|
||||
this.add(cruiserPanel);
|
||||
|
||||
this.setVisible(true);
|
||||
}
|
||||
void repaintPanel() {
|
||||
Graphics g = cruiserPanel.getGraphics();
|
||||
g.clearRect(0, 0, cruiserPanel.getWidth(), cruiserPanel.getHeight());
|
||||
drawingCruiser.DrawTransport(g);
|
||||
}
|
||||
private static class LabelTransferHandler extends TransferHandler {
|
||||
@Override
|
||||
public int getSourceActions(JComponent c) {
|
||||
return TransferHandler.COPY;
|
||||
}
|
||||
@Override
|
||||
protected Transferable createTransferable(JComponent c) {
|
||||
return new StringSelection(((JLabel) c).getText());
|
||||
}
|
||||
}
|
||||
private record ColorTransferable(Color color) implements Transferable {
|
||||
private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "Color");
|
||||
@Override
|
||||
public DataFlavor[] getTransferDataFlavors() {
|
||||
return new DataFlavor[]{colorDataFlavor};
|
||||
}
|
||||
@Override
|
||||
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
||||
return colorDataFlavor.equals(flavor);
|
||||
}
|
||||
@Override
|
||||
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
|
||||
if (isDataFlavorSupported(flavor)) {
|
||||
return color;
|
||||
} else {
|
||||
throw new UnsupportedFlavorException(flavor);
|
||||
}
|
||||
}
|
||||
}
|
||||
private static class PanelTransferHandler extends TransferHandler {
|
||||
@Override
|
||||
public int getSourceActions(JComponent c) {
|
||||
return TransferHandler.COPY;
|
||||
}
|
||||
@Override
|
||||
protected Transferable createTransferable(JComponent c) {
|
||||
return new ColorTransferable(c.getBackground());
|
||||
}
|
||||
}
|
||||
private static class LabelMouseAdapter extends MouseAdapter {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
((JLabel) e.getComponent()).getTransferHandler().exportAsDrag(((JLabel) e.getComponent()), e, TransferHandler.COPY);
|
||||
}
|
||||
}
|
||||
private static class PanelMouseAdapter extends MouseAdapter {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
((JPanel) e.getComponent()).getTransferHandler().exportAsDrag(((JPanel) e.getComponent()), e, TransferHandler.COPY);
|
||||
}
|
||||
}
|
||||
private record IDopTransferable(IDop obj) implements Transferable {
|
||||
private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "IDop");
|
||||
@Override
|
||||
public DataFlavor[] getTransferDataFlavors() {
|
||||
return new DataFlavor[]{colorDataFlavor};
|
||||
}
|
||||
@Override
|
||||
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
||||
return colorDataFlavor.equals(flavor);
|
||||
}
|
||||
@Override
|
||||
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
|
||||
if (isDataFlavorSupported(flavor)) {
|
||||
return obj;
|
||||
} else {
|
||||
throw new UnsupportedFlavorException(flavor);
|
||||
}
|
||||
}
|
||||
}
|
||||
private static class IDopMouseAdapter extends MouseAdapter {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
((JLabel) e.getComponent()).getTransferHandler().exportAsDrag(((JLabel) e.getComponent()), e, TransferHandler.COPY);
|
||||
}
|
||||
}
|
||||
private class iDopTransferable implements Transferable {
|
||||
private IDop iDopObject;
|
||||
private static final DataFlavor iDrawDataFlavor = new DataFlavor(IDop.class, "IDraw");
|
||||
public iDopTransferable(IDop iDrawObject) {
|
||||
this.iDopObject = iDrawObject;
|
||||
}
|
||||
@Override
|
||||
public DataFlavor[] getTransferDataFlavors() {
|
||||
return new DataFlavor[]{iDrawDataFlavor};
|
||||
}
|
||||
@Override
|
||||
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
||||
return iDrawDataFlavor.equals(flavor);
|
||||
}
|
||||
@Override
|
||||
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
|
||||
if (isDataFlavorSupported(flavor)) {
|
||||
return iDopObject;
|
||||
} else {
|
||||
throw new UnsupportedFlavorException(flavor);
|
||||
}
|
||||
}
|
||||
}
|
||||
private class IDopComponent extends JComponent {
|
||||
public IDop obj;
|
||||
public IDopComponent(IDop obj) {
|
||||
this.obj = obj;
|
||||
this.addMouseListener(
|
||||
new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
((IDopComponent) e.getComponent()).getTransferHandler().exportAsDrag(((IDopComponent) e.getComponent()), e, TransferHandler.COPY);
|
||||
}
|
||||
}
|
||||
);
|
||||
this.setTransferHandler(
|
||||
new TransferHandler() {
|
||||
@Override
|
||||
public int getSourceActions(JComponent c) {
|
||||
return TransferHandler.COPY;
|
||||
}
|
||||
@Override
|
||||
protected Transferable createTransferable(JComponent c) {
|
||||
return new iDopTransferable(((IDopComponent) c).obj);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
public DrawingCruiser getSelectedCruiser() {
|
||||
return SelectedCruiser;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user