370 lines
14 KiB
Java
370 lines
14 KiB
Java
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.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;
|
|
public JButton buttonClose;
|
|
private JLabel labelColor;
|
|
private JLabel labelDopColor;
|
|
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 labelBlackWheels;
|
|
private JLabel labelCountWheels;
|
|
private JSpinner numericUpDownWheels;
|
|
private JLabel labelEmptyWheels;
|
|
private JLabel labelRainbowWheels;
|
|
public Canvas canvas;
|
|
|
|
public JPanel getPictureBoxObject(){
|
|
return MainPanel;
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
// класс для перетаскивания информации из labe'лов
|
|
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());
|
|
}
|
|
}
|
|
|
|
//для обработки "схватывания" label'ов
|
|
private class LabelMouseAdapter extends MouseAdapter {
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
((JLabel)e.getComponent()).getTransferHandler().exportAsDrag(((JLabel)e.getComponent()), e, TransferHandler.COPY);
|
|
}
|
|
}
|
|
|
|
//для обработки "схватывания" panel'ей
|
|
private class PanelMouseAdapter extends MouseAdapter{
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
((JPanel)e.getComponent()).getTransferHandler().exportAsDrag(((JPanel)e.getComponent()), e, TransferHandler.COPY);
|
|
}
|
|
}
|
|
|
|
public FormLocomotiveConfig()
|
|
{
|
|
Border br = BorderFactory.createLineBorder(Color.BLACK);
|
|
|
|
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);
|
|
|
|
labelBlackWheels.setTransferHandler(new TransferHandler(){
|
|
@Override
|
|
public int getSourceActions(JComponent c) {
|
|
return TransferHandler.COPY;
|
|
}
|
|
|
|
@Override
|
|
protected Transferable createTransferable(JComponent c) {
|
|
return new WheelsTransferable(new DrawingWheel());
|
|
}
|
|
});
|
|
labelBlackWheels.addMouseListener(new LabelMouseAdapter());
|
|
labelBlackWheels.setBorder(br);
|
|
|
|
labelEmptyWheels.setTransferHandler(new TransferHandler(){
|
|
@Override
|
|
public int getSourceActions(JComponent c) {
|
|
return TransferHandler.COPY;
|
|
}
|
|
|
|
@Override
|
|
protected Transferable createTransferable(JComponent c) {
|
|
return new WheelsTransferable(new DrawingEmptyWheels());
|
|
}
|
|
});
|
|
labelEmptyWheels.addMouseListener(new LabelMouseAdapter());
|
|
labelEmptyWheels.setBorder(br);
|
|
|
|
labelRainbowWheels.setTransferHandler( new TransferHandler(){
|
|
@Override
|
|
public int getSourceActions(JComponent c) {
|
|
return TransferHandler.COPY;
|
|
}
|
|
|
|
@Override
|
|
protected Transferable createTransferable(JComponent c) {
|
|
return new WheelsTransferable(new DrawingWheelsBlueCrom());
|
|
}
|
|
});
|
|
labelRainbowWheels.addMouseListener(new LabelMouseAdapter());
|
|
labelRainbowWheels.setBorder(br);
|
|
|
|
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());
|
|
|
|
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);
|
|
|
|
panelBodyColor.setBackground(color);
|
|
|
|
Border border = BorderFactory.createLineBorder(color);
|
|
|
|
labelColor.setBorder(border);
|
|
return true;
|
|
}
|
|
catch(UnsupportedFlavorException | IOException e){
|
|
}
|
|
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);
|
|
panelAdditionalColor.setBackground(color);
|
|
Border border = BorderFactory.createLineBorder(color);
|
|
labelDopColor.setBorder(border);
|
|
if(_loco == null) return false;
|
|
if(!(_loco instanceof DrawingElectricLocomotive))
|
|
return false;
|
|
((EntityElectricLocomotive)_loco.EntityLocomotive).SetAdditionalColor(color);
|
|
return true;
|
|
}
|
|
catch(UnsupportedFlavorException | IOException e){
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}
|
|
);
|
|
|
|
pictureBoxObject.setTransferHandler(
|
|
new TransferHandler(){
|
|
@Override
|
|
public boolean canImport(TransferHandler.TransferSupport support) {
|
|
return support.isDataFlavorSupported(DataFlavor.stringFlavor) || support.isDataFlavorSupported(WheelsTransferable.wheelsDrawingDataFlavor);
|
|
}
|
|
|
|
@Override
|
|
public boolean importData(TransferHandler.TransferSupport support) {
|
|
if (canImport(support)) {
|
|
try {
|
|
String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
|
|
switch (data) {
|
|
case "Простой":
|
|
_loco = new DrawingLocomotive(
|
|
(int)numericUpDownSpeed.getValue(),
|
|
(int)numericUpDownWeight.getValue(),
|
|
Color.WHITE,
|
|
pictureBoxObject.getWidth(),
|
|
pictureBoxObject.getHeight()
|
|
);
|
|
break;
|
|
case "Сложный":
|
|
_loco = new DrawingElectricLocomotive(
|
|
(int)numericUpDownSpeed.getValue(),
|
|
(int)numericUpDownWeight.getValue(),
|
|
Color.WHITE,
|
|
Color.BLACK,
|
|
checkBoxHorns.isSelected(),
|
|
checkBoxSeifBatteries.isSelected(),
|
|
pictureBoxObject.getWidth(),
|
|
pictureBoxObject.getHeight()
|
|
);
|
|
break;
|
|
}
|
|
|
|
} catch (UnsupportedFlavorException | IOException e) {
|
|
}
|
|
try{
|
|
int wheelsCount = (int)numericUpDownWheels.getValue();
|
|
IDrawingWheels drawingWheels = (IDrawingWheels) support.getTransferable().getTransferData(WheelsTransferable.wheelsDrawingDataFlavor);
|
|
_loco._drawingWheels = drawingWheels;
|
|
_loco.SetWheelsCount(wheelsCount);
|
|
}catch(UnsupportedFlavorException | IOException e){
|
|
}
|
|
pictureBoxObject.repaint();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
private class WheelsTransferable implements Transferable {
|
|
private IDrawingWheels drawingWheels;
|
|
private static final DataFlavor wheelsDrawingDataFlavor = new DataFlavor(IDrawingWheels.class, "Wheels Drawing");
|
|
|
|
public WheelsTransferable(IDrawingWheels drawingWheels) {
|
|
this.drawingWheels = drawingWheels;
|
|
}
|
|
|
|
@Override
|
|
public DataFlavor[] getTransferDataFlavors() {
|
|
return new DataFlavor[]{wheelsDrawingDataFlavor};
|
|
}
|
|
|
|
@Override
|
|
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
|
return flavor.equals(wheelsDrawingDataFlavor);
|
|
}
|
|
|
|
@Override
|
|
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
|
|
if (isDataFlavorSupported(flavor)) {
|
|
return drawingWheels;
|
|
} else {
|
|
throw new UnsupportedFlavorException(flavor);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void createUIComponents(){
|
|
pictureBoxObject = new Canvas();
|
|
pictureBoxObject.setBounds(new Rectangle(300, 300));
|
|
|
|
SpinnerModel numSpeed = new SpinnerNumberModel(100, 100, 1000, 1);
|
|
numericUpDownSpeed = new JSpinner(numSpeed);
|
|
|
|
SpinnerModel numWeight = new SpinnerNumberModel(100, 100, 1000, 1);
|
|
numericUpDownWeight = new JSpinner(numWeight);
|
|
|
|
SpinnerModel numWheels = new SpinnerNumberModel(2,2, 4, 1);
|
|
numericUpDownWheels = new JSpinner(numWheels);
|
|
}
|
|
|
|
}
|