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 DrawingLocomotive _loco; 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; public JLabel lableSimpleObject; private JLabel labelModifiedObject; public JButton buttonOk; private JButton buttonClose; private JLabel labelColor; private JLabel labelDopColor; public JPanel pictureBoxObject; public JPanel getPictureBoxObject(){ 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() { 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; } } ); } // lableSimpleObject.addMouseListener(ml); // labelModifiedObject.setTransferHandler(new TransferHandler("rar")); }