чего-то наделала, пишем на русском, начало drag/drop

This commit is contained in:
ekallin 2023-12-03 00:14:51 +04:00
parent cd64afbf92
commit d9410fa68b
3 changed files with 259 additions and 11 deletions

View File

@ -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;
}
}

View File

@ -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"));
}

View File

@ -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);