2023-11-19 00:08:09 +04:00
|
|
|
|
package ProjectElectricLocomotive;
|
|
|
|
|
|
|
|
|
|
import javax.swing.*;
|
2023-11-20 16:33:32 +04:00
|
|
|
|
import java.awt.*;
|
2023-12-03 00:14:51 +04:00
|
|
|
|
import java.awt.datatransfer.DataFlavor;
|
|
|
|
|
import java.awt.datatransfer.StringSelection;
|
|
|
|
|
import java.awt.datatransfer.Transferable;
|
|
|
|
|
import java.awt.datatransfer.UnsupportedFlavorException;
|
|
|
|
|
import java.awt.event.MouseAdapter;
|
|
|
|
|
import java.awt.event.MouseEvent;
|
|
|
|
|
import javax.swing.border.Border;
|
|
|
|
|
import java.awt.event.MouseListener;
|
|
|
|
|
import java.io.IOException;
|
2023-12-03 15:35:18 +04:00
|
|
|
|
import java.util.Random;
|
2023-11-19 00:08:09 +04:00
|
|
|
|
|
2023-12-03 00:14:51 +04:00
|
|
|
|
public class FormLocomotiveConfig{
|
|
|
|
|
|
|
|
|
|
public DrawingLocomotive _loco;
|
2023-11-19 00:08:09 +04:00
|
|
|
|
private JPanel MainPanel;
|
|
|
|
|
private JPanel groupBoxObjectParameters;
|
|
|
|
|
private JPanel groupBoxColors;
|
|
|
|
|
private JSpinner numericUpDownSpeed;
|
|
|
|
|
private JSpinner numericUpDownWeight;
|
|
|
|
|
private JLabel labelSpeed;
|
|
|
|
|
private JLabel labelWeight;
|
|
|
|
|
private JCheckBox checkBoxHorns;
|
|
|
|
|
private JCheckBox checkBoxSeifBatteries;
|
2023-12-03 00:14:51 +04:00
|
|
|
|
public JLabel lableSimpleObject;
|
2023-11-19 00:08:09 +04:00
|
|
|
|
private JLabel labelModifiedObject;
|
2023-11-20 16:33:32 +04:00
|
|
|
|
public JButton buttonOk;
|
2023-11-19 00:08:09 +04:00
|
|
|
|
private JButton buttonClose;
|
|
|
|
|
private JLabel labelColor;
|
|
|
|
|
private JLabel labelDopColor;
|
2023-12-03 15:35:18 +04:00
|
|
|
|
public JComponent pictureBoxObject;
|
|
|
|
|
private JPanel redPanel;
|
|
|
|
|
private JPanel orangePanel;
|
|
|
|
|
private JPanel yellowPanel;
|
|
|
|
|
private JPanel ligthGreenPanel;
|
|
|
|
|
private JPanel melissePanel;
|
|
|
|
|
private JPanel ligthBluePanel;
|
|
|
|
|
private JPanel bluePanel;
|
|
|
|
|
private JPanel violetPanel;
|
|
|
|
|
private JPanel panelBodyColor;
|
|
|
|
|
private JPanel panelAdditionalColor;
|
|
|
|
|
private JLabel labelWheels;
|
|
|
|
|
public Canvas canvas;
|
2023-12-03 00:14:51 +04:00
|
|
|
|
|
2023-11-20 16:33:32 +04:00
|
|
|
|
|
|
|
|
|
public JPanel getPictureBoxObject(){
|
2023-12-03 00:14:51 +04:00
|
|
|
|
return MainPanel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MouseListener ml = new MouseListener() {
|
|
|
|
|
// @Override
|
|
|
|
|
// public void mouseClicked(MouseEvent e) {
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// @Override
|
|
|
|
|
// public void mousePressed(MouseEvent e) {
|
|
|
|
|
// JComponent jc = (JComponent)e.getSource();
|
|
|
|
|
// TransferHandler th = jc.getTransferHandler();
|
|
|
|
|
// th.exportAsDrag(jc, e, TransferHandler.COPY);
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// @Override
|
|
|
|
|
// public void mouseReleased(MouseEvent e) {
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// @Override
|
|
|
|
|
// public void mouseEntered(MouseEvent e) {
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// @Override
|
|
|
|
|
// public void mouseExited(MouseEvent e) {
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
// };
|
|
|
|
|
|
2023-12-03 15:35:18 +04:00
|
|
|
|
private class Canvas extends JComponent{
|
|
|
|
|
public Canvas(){
|
|
|
|
|
}
|
|
|
|
|
public void paintComponent (Graphics g){
|
|
|
|
|
if (_loco == null){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
super.paintComponents (g) ;
|
|
|
|
|
Graphics2D g2d = (Graphics2D)g;
|
|
|
|
|
_loco.DrawTransport(g2d);
|
|
|
|
|
super.repaint();
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-03 00:14:51 +04:00
|
|
|
|
//класс для перетаскивания типа объекта
|
|
|
|
|
private 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 class ColorTransferable implements Transferable {
|
|
|
|
|
private Color color;
|
|
|
|
|
private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "Color");
|
|
|
|
|
|
|
|
|
|
public ColorTransferable(Color color) {
|
|
|
|
|
this.color = 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, IOException {
|
|
|
|
|
if (isDataFlavorSupported(flavor)) {
|
|
|
|
|
return color;
|
|
|
|
|
} else {
|
|
|
|
|
throw new UnsupportedFlavorException(flavor);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//для перетаскивания цвета
|
|
|
|
|
private class PanelTransferHandler extends TransferHandler {
|
|
|
|
|
@Override
|
|
|
|
|
public int getSourceActions(JComponent c) {
|
|
|
|
|
return TransferHandler.COPY;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected Transferable createTransferable(JComponent c) {
|
|
|
|
|
return new ColorTransferable(((JPanel)c).getBackground());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//для обработки нажатий
|
|
|
|
|
private class LabelMouseAdapter extends MouseAdapter {
|
|
|
|
|
@Override
|
|
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
|
|
((JLabel)e.getComponent()).getTransferHandler().exportAsDrag(((JLabel)e.getComponent()), e, TransferHandler.COPY);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private class PanelMouseAdapter extends MouseAdapter{
|
|
|
|
|
@Override
|
|
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
|
|
((JPanel)e.getComponent()).getTransferHandler().exportAsDrag(((JPanel)e.getComponent()), e, TransferHandler.COPY);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-04 00:19:02 +04:00
|
|
|
|
//что бы wheel'ы можно было тaскать
|
2023-12-03 00:14:51 +04:00
|
|
|
|
private class WheelTransferable implements Transferable {
|
|
|
|
|
private IDrawingWheels wheelDrawing;
|
|
|
|
|
private static final DataFlavor wheelDrawingDataFlavor = new DataFlavor(IDrawingWheels.class, "Wheel Drawing");
|
|
|
|
|
|
|
|
|
|
public WheelTransferable(IDrawingWheels wheelDrawing) {
|
|
|
|
|
this.wheelDrawing = wheelDrawing;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public DataFlavor[] getTransferDataFlavors() {
|
|
|
|
|
return new DataFlavor[]{wheelDrawingDataFlavor};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
|
|
|
|
return flavor.equals(wheelDrawingDataFlavor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
|
|
|
|
|
if (isDataFlavorSupported(flavor)) {
|
|
|
|
|
return wheelDrawing;
|
|
|
|
|
} else {
|
|
|
|
|
throw new UnsupportedFlavorException(flavor);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//для отрисовки wheel'ов, которые можно взять и потащить
|
|
|
|
|
private class ComponentWheel extends JComponent {
|
|
|
|
|
public IDrawingWheels wheelDrawing;
|
|
|
|
|
|
|
|
|
|
public ComponentWheel(IDrawingWheels _wheelDrawing) {
|
|
|
|
|
wheelDrawing = _wheelDrawing;
|
|
|
|
|
this.addMouseListener(
|
|
|
|
|
new MouseAdapter() {
|
|
|
|
|
@Override
|
|
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
|
|
((ComponentWheel) e.getComponent()).getTransferHandler().exportAsDrag(((ComponentWheel) 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 WheelTransferable(((ComponentWheel) c).wheelDrawing);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-11-20 16:33:32 +04:00
|
|
|
|
}
|
|
|
|
|
|
2023-12-03 00:14:51 +04:00
|
|
|
|
|
|
|
|
|
|
2023-11-20 16:33:32 +04:00
|
|
|
|
public FormLocomotiveConfig()
|
|
|
|
|
{
|
2023-12-03 15:35:18 +04:00
|
|
|
|
Border br = BorderFactory.createLineBorder(Color.BLACK);
|
2023-12-03 00:14:51 +04:00
|
|
|
|
|
|
|
|
|
SpinnerModel numSpeed = new SpinnerNumberModel(100, 100, 1000, 1);
|
|
|
|
|
numericUpDownSpeed = new JSpinner(numSpeed);
|
|
|
|
|
|
|
|
|
|
SpinnerModel numWeight = new SpinnerNumberModel(100, 100, 1000, 1);
|
|
|
|
|
numericUpDownWeight = new JSpinner(numWeight);
|
|
|
|
|
|
|
|
|
|
lableSimpleObject.setTransferHandler(new LabelTransferHandler());
|
|
|
|
|
lableSimpleObject.addMouseListener(new LabelMouseAdapter());
|
|
|
|
|
lableSimpleObject.setBorder(br);
|
|
|
|
|
|
|
|
|
|
labelModifiedObject.setTransferHandler(new LabelTransferHandler());
|
|
|
|
|
labelModifiedObject.addMouseListener(new LabelMouseAdapter());
|
|
|
|
|
labelModifiedObject.setBorder(br);
|
|
|
|
|
|
2023-12-04 00:19:02 +04:00
|
|
|
|
labelWheels.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
labelWheels.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
labelWheels.setBorder(br);
|
2023-12-03 15:35:18 +04:00
|
|
|
|
|
|
|
|
|
redPanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
redPanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
|
|
|
|
orangePanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
orangePanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
|
|
|
|
yellowPanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
yellowPanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
|
|
|
|
ligthGreenPanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
ligthGreenPanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
|
|
|
|
melissePanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
melissePanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
|
|
|
|
ligthBluePanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
ligthBluePanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
|
|
|
|
bluePanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
bluePanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
|
|
|
|
violetPanel.setTransferHandler(new PanelTransferHandler());
|
|
|
|
|
violetPanel.addMouseListener(new PanelMouseAdapter());
|
|
|
|
|
|
2023-12-03 00:14:51 +04:00
|
|
|
|
labelColor.setBorder(br);
|
|
|
|
|
labelColor.setTransferHandler(
|
|
|
|
|
new TransferHandler(){
|
|
|
|
|
@Override
|
|
|
|
|
public boolean canImport(TransferHandler.TransferSupport support)
|
|
|
|
|
{
|
|
|
|
|
try{
|
|
|
|
|
Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor);
|
|
|
|
|
if(_loco == null) return false;
|
|
|
|
|
_loco.EntityLocomotive.SetBodyColor(color);
|
2023-12-03 15:35:18 +04:00
|
|
|
|
|
|
|
|
|
panelBodyColor.setBackground(color);
|
|
|
|
|
|
|
|
|
|
Border border = BorderFactory.createLineBorder(color);
|
|
|
|
|
|
|
|
|
|
labelColor.setBorder(border);
|
2023-12-03 00:14:51 +04:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch(UnsupportedFlavorException | IOException e){
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
labelDopColor.setBorder(br);
|
|
|
|
|
labelDopColor.setTransferHandler(
|
|
|
|
|
new TransferHandler(){
|
|
|
|
|
@Override
|
|
|
|
|
public boolean canImport(TransferHandler.TransferSupport support)
|
|
|
|
|
{
|
|
|
|
|
try{
|
|
|
|
|
Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor);
|
2023-12-03 15:35:18 +04:00
|
|
|
|
panelAdditionalColor.setBackground(color);
|
|
|
|
|
Border border = BorderFactory.createLineBorder(color);
|
|
|
|
|
labelDopColor.setBorder(border);
|
2023-12-03 00:14:51 +04:00
|
|
|
|
if(_loco == null) return false;
|
|
|
|
|
if(!(_loco instanceof DrawingLocomotive))
|
|
|
|
|
return false;
|
2023-12-03 15:35:18 +04:00
|
|
|
|
((EntityElectricLocomotive)_loco.EntityLocomotive).SetAdditionalColor(color);
|
2023-12-03 00:14:51 +04:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch(UnsupportedFlavorException | IOException e){
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
);
|
2023-11-20 16:33:32 +04:00
|
|
|
|
|
2023-12-04 00:19:02 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*labelWheels.setBorder(br);
|
2023-12-03 15:35:18 +04:00
|
|
|
|
labelWheels.setTransferHandler(
|
|
|
|
|
new TransferHandler(){
|
|
|
|
|
@Override
|
|
|
|
|
public boolean canImport(TransferHandler.TransferSupport support) {
|
|
|
|
|
return support.isDataFlavorSupported(WheelTransferable.wheelDrawingDataFlavor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean importData(TransferHandler.TransferSupport support){
|
|
|
|
|
if(canImport(support)) {
|
|
|
|
|
try {
|
|
|
|
|
Random rnd = new Random();
|
|
|
|
|
IDrawingWheels wheels = (IDrawingWheels) support.getTransferable().getTransferData(WheelTransferable.wheelDrawingDataFlavor);
|
|
|
|
|
if (_loco == null) return false;
|
|
|
|
|
|
|
|
|
|
int wheelsChoice = rnd.nextInt(0, 3);
|
|
|
|
|
|
2023-12-04 00:19:02 +04:00
|
|
|
|
wheels.SetWheelsCount(rnd.nextInt(2, 5));
|
2023-12-03 15:35:18 +04:00
|
|
|
|
|
|
|
|
|
if (wheelsChoice == 0) {
|
|
|
|
|
wheels = new DrawingWheel();
|
|
|
|
|
} else if (wheelsChoice == 1) {
|
|
|
|
|
wheels = new DrawingEmptyWheels();
|
|
|
|
|
} else {
|
|
|
|
|
wheels = new DrawingWheelsBlueCrom();
|
|
|
|
|
}
|
|
|
|
|
_loco._drawingWheels = wheels;
|
|
|
|
|
pictureBoxObject.repaint();
|
|
|
|
|
return true;
|
|
|
|
|
} catch (UnsupportedFlavorException | IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-04 00:19:02 +04:00
|
|
|
|
);*/
|
2023-12-03 15:35:18 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
canvas = new Canvas();
|
|
|
|
|
pictureBoxObject.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 {
|
|
|
|
|
Random rnd;
|
|
|
|
|
String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
|
|
|
|
|
switch (data) {
|
|
|
|
|
case "Простой":
|
|
|
|
|
_loco = new DrawingLocomotive(
|
|
|
|
|
(int)numericUpDownSpeed.getValue(),
|
|
|
|
|
(int)numericUpDownWeight.getValue(),
|
|
|
|
|
Color.WHITE,/* (int)numericWheelNum.getValue(),*/ /*CanvasWidth,CanvasHeight*/
|
|
|
|
|
// pictureBoxObject.getWidth(),
|
|
|
|
|
// pictureBoxObject.getHeight()
|
|
|
|
|
300,300
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
case "Сложный":
|
|
|
|
|
_loco = new DrawingElectricLocomotive(
|
|
|
|
|
(int)numericUpDownSpeed.getValue(),
|
|
|
|
|
(int)numericUpDownWeight.getValue(),
|
|
|
|
|
Color.WHITE, /*(int)numericWheelNum.getValue(),*/
|
|
|
|
|
Color.BLACK,
|
|
|
|
|
checkBoxHorns.isSelected(),
|
|
|
|
|
checkBoxSeifBatteries.isSelected(), /*checkBoxLocoLine.isSelected(),*/
|
|
|
|
|
pictureBoxObject.getWidth(),
|
|
|
|
|
pictureBoxObject.getHeight()
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
pictureBoxObject.repaint();
|
|
|
|
|
// Draw();
|
|
|
|
|
return true;
|
|
|
|
|
} catch (UnsupportedFlavorException | IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
2023-11-20 16:33:32 +04:00
|
|
|
|
|
|
|
|
|
}
|
2023-12-03 00:14:51 +04:00
|
|
|
|
// lableSimpleObject.addMouseListener(ml);
|
|
|
|
|
// labelModifiedObject.setTransferHandler(new TransferHandler("rar"));
|
|
|
|
|
|
2023-12-03 15:35:18 +04:00
|
|
|
|
public void Draw() {
|
|
|
|
|
pictureBoxObject.repaint();
|
|
|
|
|
}
|
2023-12-03 00:14:51 +04:00
|
|
|
|
|
2023-12-03 15:35:18 +04:00
|
|
|
|
private void createUIComponents(){
|
|
|
|
|
pictureBoxObject = new Canvas();
|
|
|
|
|
pictureBoxObject.setBounds(new Rectangle(300, 300));
|
|
|
|
|
}
|
2023-12-03 00:14:51 +04:00
|
|
|
|
|
2023-11-19 00:08:09 +04:00
|
|
|
|
}
|