Advertisement
Guest User

card movement

a guest
Nov 13th, 2012
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.33 KB | None | 0 0
  1. import javax.swing.*;
  2. import javax.swing.border.*;
  3. import javax.swing.event.MouseInputAdapter;
  4. import javax.swing.text.JTextComponent;
  5.  
  6. import java.awt.*;
  7. import java.awt.datatransfer.DataFlavor;
  8. import java.awt.datatransfer.Transferable;
  9. import java.awt.datatransfer.UnsupportedFlavorException;
  10. import java.awt.dnd.DropTarget;
  11. import java.awt.event.*;
  12. import java.beans.PropertyChangeEvent;
  13. import java.beans.PropertyChangeListener;
  14. import java.io.IOException;
  15. import java.util.ArrayList;
  16.  
  17.  
  18.  
  19. public class mini extends JApplet implements ActionListener
  20. {
  21.  
  22.     //GhostGlassPane glassPane;
  23.     JLayeredPane layer;
  24.    
  25.    
  26.     JTextField textFieldA;
  27.    
  28.  
  29.     JLabel card1;
  30.     JLabel card2;
  31.  
  32.     Rectangle home1;
  33.     Rectangle home2;
  34.     Rectangle home3;
  35.     Rectangle home4;
  36.     Rectangle home5;
  37.    
  38.     JLabel add1;
  39.     JLabel add2;
  40.    
  41.    
  42.     JLabel correct;
  43.     int answerA;
  44.    
  45.    
  46.    
  47.     JButton enterA;
  48.    
  49.     int enterAction;//0-3
  50.     JButton random;
  51.     JButton clear;
  52.    
  53.    
  54.     JLabel opA;
  55.     JLabel opS;
  56.     JLabel opM;
  57.     JLabel opD;
  58.     //JComboBox operator;
  59.    
  60.     JLabel correction;
  61.    
  62.     GridBagConstraints c;
  63.    
  64.     JLabel[] cards = new JLabel[5];//card1, card2....
  65.    
  66.     int[] cardVals = new int[5];
  67.    
  68.     JLabel[] places = new JLabel[8];//{add1, add2, sub1, sub2, mult1, mult2, div1, div2};
  69.     String[] operations = {"+", "-", "*", "/"};
  70.     public void init()
  71.     {
  72.         setSize(1300, 610);
  73.         setLayout(null);
  74.         ((JComponent) getContentPane()).setBorder(new LineBorder(Color.yellow));
  75.         //setBorder(new LineBorder(Color.yellow));
  76.        
  77.         layer = new JLayeredPane();
  78.         layer.setLayout(null);
  79.         layer.setBounds(30, 0, getSize().width, getSize().height);
  80.         add(layer);
  81.        
  82.        
  83.        
  84.         enterA = new JButton("Add");
  85.    
  86.         JPanel bigPanel = new JPanel(new GridBagLayout());
  87.         bigPanel.setBounds(0, 0, getSize().width, getSize().height);
  88.         layer.add(bigPanel, new Integer(0));
  89.        
  90.         JPanel panel1 = new JPanel(new FlowLayout());
  91.         JPanel panel2 = new JPanel();
  92.         GroupLayout group = new GroupLayout(panel2);
  93.         panel2.setLayout(group);
  94.         //JPanel panel2 = new JPanel(new GridBagLayout());
  95.         JPanel panel2a = new JPanel(new FlowLayout());
  96.         JPanel panel2b = new JPanel(new FlowLayout());
  97.         JPanel panel2c = new JPanel(new FlowLayout());
  98.         JPanel panel2d = new JPanel(new FlowLayout());
  99.         JPanel panel2e = new JPanel(new FlowLayout());
  100.        
  101.         JPanel panel3 = new JPanel(new FlowLayout());
  102.        
  103.    
  104.         JPanel panel5 = new JPanel(new BorderLayout());
  105.         //panel.setSize(200, 200);
  106.        
  107.         textFieldA = new JTextField();
  108.         textFieldA.setHorizontalAlignment(JTextField.CENTER);
  109.         textFieldA.setEditable(false);
  110.         textFieldA.setBorder(new LineBorder(Color.blue));
  111.        
  112.         //Border b1 = new Border();
  113.         TitledBorder cardBorder = BorderFactory.createTitledBorder("Your Cards");
  114.         TitledBorder blankCards = BorderFactory.createTitledBorder("The Operation Cards");
  115.         TitledBorder Actions = BorderFactory.createTitledBorder("Actions");
  116.         Border b2 = BorderFactory.createEtchedBorder(Color.blue, Color.pink);
  117.    
  118.         card1 = new JLabel();
  119.         card1.setHorizontalAlignment(JLabel.CENTER);
  120.         card1.setTransferHandler(new TransferHandler("text"));
  121.         card1.setBorder(b2);
  122.        
  123.        
  124.         //card1.setHorizontalAlignment(CENTER);
  125.         //card1.setVerticalTextPosition(CENTER);
  126.        
  127.        
  128.         card2 = new JLabel();
  129.         card2.setHorizontalAlignment(JLabel.CENTER);
  130.         card2.setTransferHandler(new TransferHandler("text"));
  131.         card2.setBorder(b2);
  132.        
  133.        
  134.        
  135.    
  136.        
  137.         cards[0] = card1;
  138.         cards[1] = card2;
  139.    
  140.         TransferHandler transfer = new TransferHandler("text"){
  141.            
  142.             @Override
  143.             protected void exportDone(JComponent source, Transferable data, int action) {
  144.                 if (action == MOVE){
  145.                     ((JLabel) source).setText("");
  146.                 }
  147.             }
  148.            
  149.             @Override
  150.             public int getSourceActions(JComponent c) {
  151.                 return COPY | MOVE;
  152.             }
  153.            
  154.             @Override
  155.             public boolean importData(JComponent comp, Transferable t)
  156.             {
  157.                 if( !((JLabel)comp).getText().equals(""))
  158.                 {
  159.                    
  160.                     String text = ((JLabel)comp).getText();
  161.                     if(text.equals(String.valueOf(cardVals[0])) )
  162.                     {
  163.                         cards[0].setBounds(home1);
  164.                         cards[0].setVisible(true);
  165.                     }
  166.                     if(text.equals(String.valueOf(cardVals[1])) )
  167.                     {
  168.                         cards[1].setBounds(home2);
  169.                         cards[1].setVisible(true);
  170.                     }
  171.                    
  172.                
  173.                    
  174.                 }
  175.                 return true;
  176.             }
  177.         };
  178.        
  179.        
  180.         add1 = new JLabel("", JLabel.CENTER);
  181.         add1.setTransferHandler(transfer);
  182.         add1.setBorder(b2);
  183.         add2 = new JLabel("", JLabel.CENTER);
  184.         add2.setTransferHandler(transfer);
  185.         add2.setBorder(b2);
  186.        
  187.        
  188.         places[0] = add1;
  189.         places[1] = add2;
  190.        
  191.        
  192.         correct = new JLabel("", JLabel.CENTER);
  193.         correction = new JLabel("", JLabel.CENTER);
  194.        
  195.        
  196.         MouseListener listener = new DragMouseAdapter();
  197.         CompMover mover = new CompMover();
  198.        
  199.         add1.addMouseListener(listener);
  200.         add2.addMouseListener(listener);
  201.    
  202.        
  203.         card1.addMouseListener(mover);     
  204.         card2.addMouseListener(mover);
  205.  
  206.         card1.addMouseMotionListener(mover);
  207.         card2.addMouseMotionListener(mover);
  208.    
  209.         enterA.addActionListener(this);
  210.  
  211.                
  212.         enterA.setMargin(null);
  213.    
  214.        
  215.         random = new JButton("Randomize");
  216.         random.addActionListener(this);
  217.         //panel.add(card1);
  218.        
  219.         clear = new JButton("Clear");
  220.         clear.addActionListener(this);
  221.        
  222.         //operator = new JComboBox(operations);
  223.         //((JLabel)operator.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
  224.         opA = new JLabel("+", JLabel.CENTER);
  225.    
  226.        
  227.         //panel.setBorder(b2);
  228.         Dimension d = card1.getPreferredSize();
  229.         int width = d.width + 100;
  230.         int height = d.height + 50;
  231.    
  232.    
  233.         add1.setPreferredSize(new Dimension(width, height));
  234.         add2.setPreferredSize(new Dimension(width, height));
  235.    
  236.  
  237.         correct.setPreferredSize(new Dimension(width, height));
  238.         textFieldA.setPreferredSize(new Dimension(width, height));
  239.    
  240.         //operator.setPreferredSize(new Dimension(width-40, height-20));
  241.         opA.setPreferredSize(new Dimension(width-40, height-20));
  242.    
  243.         enterA.setPreferredSize(new Dimension(95, 20));
  244.  
  245.         card1.setBounds(150, 40, width, height);
  246.         //card1.setBounds(add1.getBounds());
  247.         System.out.println("card1: " + card1.getX() + " " + card1.getY() + " " + card1.getWidth() + " " + card1.getHeight());
  248.         card2.setBounds(350, 40, width, height);
  249.    
  250.        
  251.         home1 = new Rectangle(card1.getBounds());
  252.         home2 = new Rectangle(card2.getBounds());
  253.  
  254.         //////////////////////////////////////
  255.         randomize();
  256.         /////////////////////////////////////
  257.    
  258.         panel1.setBorder(cardBorder);
  259.        
  260.        
  261.        
  262.         DropTarget dt = new DropTarget();
  263.         dt.setActive(false);
  264.         card1.setDropTarget(dt);
  265.         card2.setDropTarget(dt);
  266.        
  267.    
  268.         panel2a.add(add1);
  269.         panel2a.add(opA);
  270.         panel2a.add(add2);
  271.         panel2a.add(enterA);
  272.         panel2a.add(textFieldA);
  273.    
  274.        
  275.         panel2e.add(correct);
  276.         panel2e.add(correction);
  277.        
  278.        
  279.         group.setAutoCreateGaps(true);
  280.         group.setAutoCreateContainerGaps(true);
  281.         group.setHorizontalGroup(
  282.                 group.createSequentialGroup()
  283.                     .addGroup(group.createParallelGroup(GroupLayout.Alignment.LEADING)
  284.                         .addComponent(panel2a)
  285.                         .addComponent(panel2c)
  286.                         .addComponent(panel2e) )
  287.                     .addGroup(group.createParallelGroup(GroupLayout.Alignment.TRAILING)
  288.                         .addComponent(panel2b)
  289.                         .addComponent(panel2d) )
  290.                    
  291.                        
  292.         );
  293.        
  294.         group.setVerticalGroup(
  295.                 group.createSequentialGroup()
  296.                     .addGroup(group.createParallelGroup(GroupLayout.Alignment.BASELINE)
  297.                             .addComponent(panel2a)
  298.                             .addComponent(panel2b) )
  299.                     .addGroup(group.createParallelGroup(GroupLayout.Alignment.BASELINE)
  300.                             .addComponent(panel2c)
  301.                             .addComponent(panel2d) )
  302.                     .addComponent(panel2e)
  303.         );
  304.                    
  305.         group.linkSize(SwingConstants.HORIZONTAL, panel2a, panel2b, panel2c, panel2d);
  306.         /*panel2.add(panel2a);
  307.         panel2.add(panel2b);
  308.         panel2.add(panel2c);
  309.         panel2.add(panel2d);
  310.         panel2.add(panel2e);*/
  311.         panel2.setBorder(blankCards);
  312.         panel2.setPreferredSize(new Dimension(500, 1000));
  313.        
  314.         //panel3.add(enter);
  315.         //panel3.add(textFieldA);  
  316.        
  317.         panel3.add(random);
  318.         panel3.add(clear);
  319.         //panel4.setBorder(Actions);
  320.        
  321.        
  322.         //panel5.add(panel3, BorderLayout.NORTH);
  323.         panel5.add(panel3, BorderLayout.CENTER);   
  324.         //panel5.setSize(getWidth(), 100);
  325.        
  326.        
  327.        
  328.         panel5.setBorder(Actions);
  329.  
  330.         GridBagConstraints c = new GridBagConstraints();
  331.         c.gridx = 0;
  332.         c.gridy = 0;
  333.         c.gridwidth = 3;
  334.        
  335.         c.weightx =1;
  336.         c.weighty= 1;
  337.         c.fill = GridBagConstraints.BOTH;
  338.         //panel1Big.setOpaque(true);
  339.         //layer.add(panel1, c, new Integer(0));
  340.         bigPanel.add(panel1, c);
  341.        
  342.         System.out.println(panel1.getBounds().x + " " + panel1.getBounds().y + " " + panel1.getBounds().width + " " + panel1.getBounds().height);
  343.        
  344.         c.gridheight = 1;
  345.         c.gridy = 1;
  346.         bigPanel.add(panel2, c);
  347.        
  348.         c.gridy = 2;
  349.         bigPanel.add(panel5, c);
  350.         //add(panel3);
  351.        
  352.         //layer.setVisible(false);
  353.         //add(panel4);
  354.         layer.add(card1, new Integer(1));
  355.         layer.add(card2, new Integer(1));
  356.    
  357.        
  358.    
  359.     }
  360.  
  361.     private class DragMouseAdapter extends MouseAdapter
  362.     {
  363.        
  364.        
  365.         public void mousePressed(MouseEvent e)
  366.         {
  367.             JComponent comp = (JComponent)e.getSource();
  368.            
  369.             TransferHandler handler = comp.getTransferHandler();
  370.             System.out.println(e.toString());
  371.            
  372.            
  373.             handler.exportAsDrag(comp, e, TransferHandler.MOVE);
  374.             System.out.println( ((JLabel)comp).getText() );
  375.            
  376.             //repaint();
  377.            
  378.            
  379.         }
  380.        
  381.        
  382.    
  383.        
  384.     }
  385.  
  386.    
  387.     public void calc(char enter)
  388.     {
  389.        
  390.        
  391.         float num1;
  392.         float num2;
  393.         if(enter == 'a') //add
  394.         {
  395.             if(add1.getText().equals("") || add2.getText().equals(""))
  396.             {
  397.                 correct.setText("INVALID!");
  398.                 correct.setBorder(new LineBorder(Color.red));
  399.                 correction.setText("Two cards are needed!");
  400.                 return;
  401.             }
  402.             else{
  403.                 num1 = Float.valueOf(add1.getText());
  404.                 num2 = Float.valueOf(add2.getText());
  405.             }
  406.             correct.setVisible(true);
  407.             if( (num1 + num2) == answerA)
  408.             {
  409.                 correct.setText("Correct!");
  410.                 correct.setBorder(new LineBorder(Color.cyan));
  411.                 correction.setText("");
  412.             }
  413.             else
  414.             {
  415.                 correct.setText("Incorrect!");
  416.                 correct.setBorder(new LineBorder(Color.red));
  417.                 correction.setText(num1 + "+" + num2 + "=" + (num1+num2));
  418.             }
  419.         }
  420.             //textFieldA.setText(String.valueOf(num1+num2));
  421.        
  422.        
  423.        
  424.         else //undefined
  425.             System.out.println("Undefined enter clicked");
  426.     }
  427.  
  428.     public void randomize()
  429.     {
  430.         correct.setVisible(false);
  431.         correction.setText("");
  432.         add1.setText("");
  433.         add2.setText("");
  434.    
  435.         int[] num = new int[5];
  436.         for(int i = 0; i< 2; i++)
  437.         {
  438.             num[i] = (int)(Math.random()*100);
  439.             //System.out.println(num[i]);
  440.             cardVals[i] = num[i];
  441.         }
  442.        
  443.        
  444.         ArrayList<Integer> answersA = new ArrayList<Integer>();
  445.  
  446.  
  447.         for(int i=0; i<2; i++)
  448.             for(int j=0; j<2; j++)
  449.             {
  450.                 if(i == j)
  451.                     continue;
  452.        
  453.                 answersA.add(num[i] + num[j]);
  454.                
  455.                
  456.             }
  457.         int answerPick = (int)(Math.random()*answersA.size());
  458.  
  459.         answerA = answersA.get(answerPick);
  460.  
  461.        
  462.         card1.setText(String.valueOf(num[0]));
  463.         card2.setText(String.valueOf(num[1]));
  464.    
  465.        
  466.         card1.setLocation(home1.x, home1.y);
  467.         card2.setLocation(home2.x, home2.y);
  468.    
  469.        
  470.         card1.setVisible(true);
  471.         card2.setVisible(true);
  472.  
  473.         textFieldA.setText(String.valueOf(answerA));
  474.        
  475.     }
  476.        
  477.    
  478.    
  479.  
  480.     public void actionPerformed(ActionEvent evt)
  481.     {
  482.         if(evt.getSource() == enterA)
  483.             calc('a');
  484.         else if(evt.getSource() == random)
  485.             randomize();
  486.         else if(evt.getSource() == clear)
  487.             clear();
  488.    
  489.     }
  490.    
  491.     private void clear()
  492.     {
  493.         card1.setLocation(home1.getLocation());
  494.         card2.setLocation(home2.getLocation());
  495.    
  496.        
  497.         for(int i =0;i <2; i++)
  498.             cards[i].setVisible(true);
  499.        
  500.         add1.setText("");
  501.         add2.setText("");
  502.    
  503.        
  504.         correct.setVisible(false);
  505.         correction.setText("");
  506.     }
  507. private class CompMover extends MouseInputAdapter
  508.     {
  509.          Component selectedComponent;
  510.             Point offset;
  511.             boolean dragging;
  512.             boolean moved = false;
  513.            
  514.      
  515.             public CompMover()
  516.             {
  517.                 dragging = false;
  518.             }
  519.      
  520.             public void mousePressed(MouseEvent e)
  521.             {
  522.                 selectedComponent = (Component)e.getSource();
  523.                 offset = e.getPoint();
  524.                 dragging = true;
  525.              
  526.             }
  527.      
  528.             public void mouseReleased(MouseEvent e)
  529.             {
  530.                 dragging = false;
  531.                 Rectangle box1 = new Rectangle(), box2 = new Rectangle();
  532.                 box1.setBounds(selectedComponent.getLocationOnScreen().x, selectedComponent.getLocationOnScreen().y, selectedComponent.getWidth(), selectedComponent.getHeight() );
  533.                 System.out.println(box1.x + " " + box1.y + " " + box1.width + " " + box1.height);
  534.                
  535.                
  536.                 for(int i=0; i<places.length; i++)
  537.                 {
  538.                     box2.setBounds(places[i].getLocationOnScreen().x, places[i].getLocationOnScreen().y, places[i].getWidth(), places[i].getHeight());
  539.                    
  540.                                        
  541.                     if(box1.intersects(box2))
  542.                     {
  543.                         //System.out.println(box2.x + " " + box2.y + " " + box2.width + " " + box2.height);
  544.                        
  545.                         if(places[i].getText() != "")
  546.                         {
  547.                            
  548.                             for(int j=0; j<2; j++)
  549.                             {
  550.                                 if(cardVals[j] == Integer.valueOf(places[i].getText()) )
  551.                                 {
  552.                                     cards[j].setVisible(true);
  553.                                     if(selectedComponent.equals(card1))
  554.                                         card1.setBounds(home1);
  555.                                     else if(selectedComponent.equals(card2))
  556.                                         card2.setBounds(home2);
  557.                                
  558.                                 }
  559.                             }//for
  560.                            
  561.                         }
  562.                        
  563.                         String text = ((JLabel) selectedComponent).getText();          
  564.                         places[i].setText(text);
  565.                        
  566.                         //selectedComponent.setLocation(places[i].getLocationOnScreen());
  567.                         //System.out.println("selected comp loc: " + selectedComponent.getLocationOnScreen());
  568.                         //System.out.println("places[i] loc: " + places[i].getLocationOnScreen());
  569.                         //System.out.println("places[i] location: " + places[i].getLocationOnScreen().x + " " + places[i].getLocationOnScreen().getY());
  570.                         //selectedComponent.setBounds(places[i].getBounds() );
  571.                         //layer.add(selectedComponent);
  572.                         //repaint();
  573.                        
  574.                         moved = true;
  575.                        
  576.                         selectedComponent.setVisible(false);
  577.                        
  578.                    
  579.                        
  580.                     }
  581.                     //if(moved == true)
  582.                         //continue;
  583.                     if(moved == false)
  584.                     {
  585.                         if(selectedComponent.equals(card1))
  586.                             card1.setBounds(home1);
  587.                         else if(selectedComponent.equals(card2))
  588.                             card2.setBounds(home2);
  589.                    
  590.                     }
  591.                    
  592.                     moved = false;
  593.                    
  594.                 }
  595.                
  596.                
  597.             }
  598.      
  599.             public void mouseDragged(MouseEvent e)
  600.             {
  601.                 if(dragging)
  602.                 {
  603.                     Rectangle r = selectedComponent.getBounds();
  604.                
  605.                     r.x += e.getX() - offset.x;
  606.                     r.y += e.getY() - offset.y;
  607.                     selectedComponent.setBounds(r);
  608.                    
  609.                 }
  610.             }
  611.  
  612.     }//private inner class for moving
  613.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement