diff --git a/ProjectElectricLocomotive/EntityLocomotive.java b/ProjectElectricLocomotive/EntityLocomotive.java index be4cdb4..c99471b 100644 --- a/ProjectElectricLocomotive/EntityLocomotive.java +++ b/ProjectElectricLocomotive/EntityLocomotive.java @@ -15,9 +15,13 @@ public class EntityLocomotive { { return (double) Speed * 100 / Weight; } - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean horns, boolean seifbatteries) { + public void Init(int speed, double weight, Color bodyColor/*, Color additionalColor, boolean horns, boolean seifbatteries*/) { Speed = speed; Weight = weight; BodyColor = bodyColor; } + + public void SetBodyColor(Color color){ + BodyColor = color; + } } diff --git a/ProjectElectricLocomotive/FormLocomotiveConfig.java b/ProjectElectricLocomotive/FormLocomotiveConfig.java index ea78bfb..20d9259 100644 --- a/ProjectElectricLocomotive/FormLocomotiveConfig.java +++ b/ProjectElectricLocomotive/FormLocomotiveConfig.java @@ -2,8 +2,19 @@ package ProjectElectricLocomotive; import javax.swing.*; 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.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.border.Border; +import java.awt.event.MouseListener; +import java.io.IOException; -public class FormLocomotiveConfig { +public class FormLocomotiveConfig{ + + public DrawingLocomotive _loco; private JPanel MainPanel; private JPanel groupBoxObjectParameters; private JPanel groupBoxColors; @@ -13,27 +24,254 @@ public class FormLocomotiveConfig { private JLabel labelWeight; private JCheckBox checkBoxHorns; private JCheckBox checkBoxSeifBatteries; - private JLabel lableSimpleObject; + public JLabel lableSimpleObject; private JLabel labelModifiedObject; public JButton buttonOk; private JButton buttonClose; private JLabel labelColor; private JLabel labelDopColor; - private JPanel pictureBoxObject; + public JPanel pictureBoxObject; + public JPanel getPictureBoxObject(){ - return pictureBoxObject; + 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) { +// +// } +// }; + +// private class Canvas extends JComponent{ +// public Canvas(){ +// } +// public void paintComponent (Graphics g){ +// if ( == null){ +// return; +// } +// super.paintComponents (g) ; +// Graphics2D g2d = (Graphics2D)g; +// _train.DrawTransport(g2d); +// super.repaint(); +// } +// } + //класс для перетаскивания типа объекта + 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); + } + } + + //что бы wheel'ы можно было тоскать + 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); + } + } + ); + } + } + + + public FormLocomotiveConfig() { - MainPanel.setPreferredSize(new Dimension(900, 400)); - pictureBoxObject.setPreferredSize(new Dimension(300, 300)); // почему только на это реагируем, а? -// groupBoxObjectParameters.setPreferredSize(new Dimension(600,400)); -// groupBoxColors.setPreferredSize(new Dimension(210,200)); - } + Border br = BorderFactory.createLineBorder(Color.cyan); + + 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); + + 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); + 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); + if(_loco == null) return false; + if(!(_loco instanceof DrawingLocomotive)) + return false; + ((EntityElectricLocomotive)_loco.EntityLocomotive).SetBodyColor(color); + return true; + } + catch(UnsupportedFlavorException | IOException e){ + e.printStackTrace(); + } + return false; + } + + } + ); - public void PanelMouse_Down(){ } +// lableSimpleObject.addMouseListener(ml); +// labelModifiedObject.setTransferHandler(new TransferHandler("rar")); + + + } diff --git a/ProjectElectricLocomotive/FrameLocomotiveConfig.java b/ProjectElectricLocomotive/FrameLocomotiveConfig.java index d098fe7..0944dc6 100644 --- a/ProjectElectricLocomotive/FrameLocomotiveConfig.java +++ b/ProjectElectricLocomotive/FrameLocomotiveConfig.java @@ -1,8 +1,14 @@ package ProjectElectricLocomotive; import javax.swing.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + public class FrameLocomotiveConfig extends JFrame{ + + public FormLocomotiveConfig _formLocomotiveConfig; public FrameLocomotiveConfig() { + super(); setTitle("Конфиг"); setDefaultCloseOperation(DISPOSE_ON_CLOSE);