Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.swing.*;
- import javax.swing.border.*;
- import javax.swing.event.MouseInputAdapter;
- import javax.swing.text.JTextComponent;
- import java.awt.*;
- import java.awt.datatransfer.DataFlavor;
- import java.awt.datatransfer.Transferable;
- import java.awt.datatransfer.UnsupportedFlavorException;
- import java.awt.dnd.DropTarget;
- import java.awt.event.*;
- import java.beans.PropertyChangeEvent;
- import java.beans.PropertyChangeListener;
- import java.io.IOException;
- import java.util.ArrayList;
- public class mini extends JApplet implements ActionListener
- {
- //GhostGlassPane glassPane;
- JLayeredPane layer;
- JTextField textFieldA;
- JLabel card1;
- JLabel card2;
- Rectangle home1;
- Rectangle home2;
- Rectangle home3;
- Rectangle home4;
- Rectangle home5;
- JLabel add1;
- JLabel add2;
- JLabel correct;
- int answerA;
- JButton enterA;
- int enterAction;//0-3
- JButton random;
- JButton clear;
- JLabel opA;
- JLabel opS;
- JLabel opM;
- JLabel opD;
- //JComboBox operator;
- JLabel correction;
- GridBagConstraints c;
- JLabel[] cards = new JLabel[5];//card1, card2....
- int[] cardVals = new int[5];
- JLabel[] places = new JLabel[8];//{add1, add2, sub1, sub2, mult1, mult2, div1, div2};
- String[] operations = {"+", "-", "*", "/"};
- public void init()
- {
- setSize(1300, 610);
- setLayout(null);
- ((JComponent) getContentPane()).setBorder(new LineBorder(Color.yellow));
- //setBorder(new LineBorder(Color.yellow));
- layer = new JLayeredPane();
- layer.setLayout(null);
- layer.setBounds(30, 0, getSize().width, getSize().height);
- add(layer);
- enterA = new JButton("Add");
- JPanel bigPanel = new JPanel(new GridBagLayout());
- bigPanel.setBounds(0, 0, getSize().width, getSize().height);
- layer.add(bigPanel, new Integer(0));
- JPanel panel1 = new JPanel(new FlowLayout());
- JPanel panel2 = new JPanel();
- GroupLayout group = new GroupLayout(panel2);
- panel2.setLayout(group);
- //JPanel panel2 = new JPanel(new GridBagLayout());
- JPanel panel2a = new JPanel(new FlowLayout());
- JPanel panel2b = new JPanel(new FlowLayout());
- JPanel panel2c = new JPanel(new FlowLayout());
- JPanel panel2d = new JPanel(new FlowLayout());
- JPanel panel2e = new JPanel(new FlowLayout());
- JPanel panel3 = new JPanel(new FlowLayout());
- JPanel panel5 = new JPanel(new BorderLayout());
- //panel.setSize(200, 200);
- textFieldA = new JTextField();
- textFieldA.setHorizontalAlignment(JTextField.CENTER);
- textFieldA.setEditable(false);
- textFieldA.setBorder(new LineBorder(Color.blue));
- //Border b1 = new Border();
- TitledBorder cardBorder = BorderFactory.createTitledBorder("Your Cards");
- TitledBorder blankCards = BorderFactory.createTitledBorder("The Operation Cards");
- TitledBorder Actions = BorderFactory.createTitledBorder("Actions");
- Border b2 = BorderFactory.createEtchedBorder(Color.blue, Color.pink);
- card1 = new JLabel();
- card1.setHorizontalAlignment(JLabel.CENTER);
- card1.setTransferHandler(new TransferHandler("text"));
- card1.setBorder(b2);
- //card1.setHorizontalAlignment(CENTER);
- //card1.setVerticalTextPosition(CENTER);
- card2 = new JLabel();
- card2.setHorizontalAlignment(JLabel.CENTER);
- card2.setTransferHandler(new TransferHandler("text"));
- card2.setBorder(b2);
- cards[0] = card1;
- cards[1] = card2;
- TransferHandler transfer = new TransferHandler("text"){
- @Override
- protected void exportDone(JComponent source, Transferable data, int action) {
- if (action == MOVE){
- ((JLabel) source).setText("");
- }
- }
- @Override
- public int getSourceActions(JComponent c) {
- return COPY | MOVE;
- }
- @Override
- public boolean importData(JComponent comp, Transferable t)
- {
- if( !((JLabel)comp).getText().equals(""))
- {
- String text = ((JLabel)comp).getText();
- if(text.equals(String.valueOf(cardVals[0])) )
- {
- cards[0].setBounds(home1);
- cards[0].setVisible(true);
- }
- if(text.equals(String.valueOf(cardVals[1])) )
- {
- cards[1].setBounds(home2);
- cards[1].setVisible(true);
- }
- }
- return true;
- }
- };
- add1 = new JLabel("", JLabel.CENTER);
- add1.setTransferHandler(transfer);
- add1.setBorder(b2);
- add2 = new JLabel("", JLabel.CENTER);
- add2.setTransferHandler(transfer);
- add2.setBorder(b2);
- places[0] = add1;
- places[1] = add2;
- correct = new JLabel("", JLabel.CENTER);
- correction = new JLabel("", JLabel.CENTER);
- MouseListener listener = new DragMouseAdapter();
- CompMover mover = new CompMover();
- add1.addMouseListener(listener);
- add2.addMouseListener(listener);
- card1.addMouseListener(mover);
- card2.addMouseListener(mover);
- card1.addMouseMotionListener(mover);
- card2.addMouseMotionListener(mover);
- enterA.addActionListener(this);
- enterA.setMargin(null);
- random = new JButton("Randomize");
- random.addActionListener(this);
- //panel.add(card1);
- clear = new JButton("Clear");
- clear.addActionListener(this);
- //operator = new JComboBox(operations);
- //((JLabel)operator.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
- opA = new JLabel("+", JLabel.CENTER);
- //panel.setBorder(b2);
- Dimension d = card1.getPreferredSize();
- int width = d.width + 100;
- int height = d.height + 50;
- add1.setPreferredSize(new Dimension(width, height));
- add2.setPreferredSize(new Dimension(width, height));
- correct.setPreferredSize(new Dimension(width, height));
- textFieldA.setPreferredSize(new Dimension(width, height));
- //operator.setPreferredSize(new Dimension(width-40, height-20));
- opA.setPreferredSize(new Dimension(width-40, height-20));
- enterA.setPreferredSize(new Dimension(95, 20));
- card1.setBounds(150, 40, width, height);
- //card1.setBounds(add1.getBounds());
- System.out.println("card1: " + card1.getX() + " " + card1.getY() + " " + card1.getWidth() + " " + card1.getHeight());
- card2.setBounds(350, 40, width, height);
- home1 = new Rectangle(card1.getBounds());
- home2 = new Rectangle(card2.getBounds());
- //////////////////////////////////////
- randomize();
- /////////////////////////////////////
- panel1.setBorder(cardBorder);
- DropTarget dt = new DropTarget();
- dt.setActive(false);
- card1.setDropTarget(dt);
- card2.setDropTarget(dt);
- panel2a.add(add1);
- panel2a.add(opA);
- panel2a.add(add2);
- panel2a.add(enterA);
- panel2a.add(textFieldA);
- panel2e.add(correct);
- panel2e.add(correction);
- group.setAutoCreateGaps(true);
- group.setAutoCreateContainerGaps(true);
- group.setHorizontalGroup(
- group.createSequentialGroup()
- .addGroup(group.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(panel2a)
- .addComponent(panel2c)
- .addComponent(panel2e) )
- .addGroup(group.createParallelGroup(GroupLayout.Alignment.TRAILING)
- .addComponent(panel2b)
- .addComponent(panel2d) )
- );
- group.setVerticalGroup(
- group.createSequentialGroup()
- .addGroup(group.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(panel2a)
- .addComponent(panel2b) )
- .addGroup(group.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(panel2c)
- .addComponent(panel2d) )
- .addComponent(panel2e)
- );
- group.linkSize(SwingConstants.HORIZONTAL, panel2a, panel2b, panel2c, panel2d);
- /*panel2.add(panel2a);
- panel2.add(panel2b);
- panel2.add(panel2c);
- panel2.add(panel2d);
- panel2.add(panel2e);*/
- panel2.setBorder(blankCards);
- panel2.setPreferredSize(new Dimension(500, 1000));
- //panel3.add(enter);
- //panel3.add(textFieldA);
- panel3.add(random);
- panel3.add(clear);
- //panel4.setBorder(Actions);
- //panel5.add(panel3, BorderLayout.NORTH);
- panel5.add(panel3, BorderLayout.CENTER);
- //panel5.setSize(getWidth(), 100);
- panel5.setBorder(Actions);
- GridBagConstraints c = new GridBagConstraints();
- c.gridx = 0;
- c.gridy = 0;
- c.gridwidth = 3;
- c.weightx =1;
- c.weighty= 1;
- c.fill = GridBagConstraints.BOTH;
- //panel1Big.setOpaque(true);
- //layer.add(panel1, c, new Integer(0));
- bigPanel.add(panel1, c);
- System.out.println(panel1.getBounds().x + " " + panel1.getBounds().y + " " + panel1.getBounds().width + " " + panel1.getBounds().height);
- c.gridheight = 1;
- c.gridy = 1;
- bigPanel.add(panel2, c);
- c.gridy = 2;
- bigPanel.add(panel5, c);
- //add(panel3);
- //layer.setVisible(false);
- //add(panel4);
- layer.add(card1, new Integer(1));
- layer.add(card2, new Integer(1));
- }
- private class DragMouseAdapter extends MouseAdapter
- {
- public void mousePressed(MouseEvent e)
- {
- JComponent comp = (JComponent)e.getSource();
- TransferHandler handler = comp.getTransferHandler();
- System.out.println(e.toString());
- handler.exportAsDrag(comp, e, TransferHandler.MOVE);
- System.out.println( ((JLabel)comp).getText() );
- //repaint();
- }
- }
- public void calc(char enter)
- {
- float num1;
- float num2;
- if(enter == 'a') //add
- {
- if(add1.getText().equals("") || add2.getText().equals(""))
- {
- correct.setText("INVALID!");
- correct.setBorder(new LineBorder(Color.red));
- correction.setText("Two cards are needed!");
- return;
- }
- else{
- num1 = Float.valueOf(add1.getText());
- num2 = Float.valueOf(add2.getText());
- }
- correct.setVisible(true);
- if( (num1 + num2) == answerA)
- {
- correct.setText("Correct!");
- correct.setBorder(new LineBorder(Color.cyan));
- correction.setText("");
- }
- else
- {
- correct.setText("Incorrect!");
- correct.setBorder(new LineBorder(Color.red));
- correction.setText(num1 + "+" + num2 + "=" + (num1+num2));
- }
- }
- //textFieldA.setText(String.valueOf(num1+num2));
- else //undefined
- System.out.println("Undefined enter clicked");
- }
- public void randomize()
- {
- correct.setVisible(false);
- correction.setText("");
- add1.setText("");
- add2.setText("");
- int[] num = new int[5];
- for(int i = 0; i< 2; i++)
- {
- num[i] = (int)(Math.random()*100);
- //System.out.println(num[i]);
- cardVals[i] = num[i];
- }
- ArrayList<Integer> answersA = new ArrayList<Integer>();
- for(int i=0; i<2; i++)
- for(int j=0; j<2; j++)
- {
- if(i == j)
- continue;
- answersA.add(num[i] + num[j]);
- }
- int answerPick = (int)(Math.random()*answersA.size());
- answerA = answersA.get(answerPick);
- card1.setText(String.valueOf(num[0]));
- card2.setText(String.valueOf(num[1]));
- card1.setLocation(home1.x, home1.y);
- card2.setLocation(home2.x, home2.y);
- card1.setVisible(true);
- card2.setVisible(true);
- textFieldA.setText(String.valueOf(answerA));
- }
- public void actionPerformed(ActionEvent evt)
- {
- if(evt.getSource() == enterA)
- calc('a');
- else if(evt.getSource() == random)
- randomize();
- else if(evt.getSource() == clear)
- clear();
- }
- private void clear()
- {
- card1.setLocation(home1.getLocation());
- card2.setLocation(home2.getLocation());
- for(int i =0;i <2; i++)
- cards[i].setVisible(true);
- add1.setText("");
- add2.setText("");
- correct.setVisible(false);
- correction.setText("");
- }
- private class CompMover extends MouseInputAdapter
- {
- Component selectedComponent;
- Point offset;
- boolean dragging;
- boolean moved = false;
- public CompMover()
- {
- dragging = false;
- }
- public void mousePressed(MouseEvent e)
- {
- selectedComponent = (Component)e.getSource();
- offset = e.getPoint();
- dragging = true;
- }
- public void mouseReleased(MouseEvent e)
- {
- dragging = false;
- Rectangle box1 = new Rectangle(), box2 = new Rectangle();
- box1.setBounds(selectedComponent.getLocationOnScreen().x, selectedComponent.getLocationOnScreen().y, selectedComponent.getWidth(), selectedComponent.getHeight() );
- System.out.println(box1.x + " " + box1.y + " " + box1.width + " " + box1.height);
- for(int i=0; i<places.length; i++)
- {
- box2.setBounds(places[i].getLocationOnScreen().x, places[i].getLocationOnScreen().y, places[i].getWidth(), places[i].getHeight());
- if(box1.intersects(box2))
- {
- //System.out.println(box2.x + " " + box2.y + " " + box2.width + " " + box2.height);
- if(places[i].getText() != "")
- {
- for(int j=0; j<2; j++)
- {
- if(cardVals[j] == Integer.valueOf(places[i].getText()) )
- {
- cards[j].setVisible(true);
- if(selectedComponent.equals(card1))
- card1.setBounds(home1);
- else if(selectedComponent.equals(card2))
- card2.setBounds(home2);
- }
- }//for
- }
- String text = ((JLabel) selectedComponent).getText();
- places[i].setText(text);
- //selectedComponent.setLocation(places[i].getLocationOnScreen());
- //System.out.println("selected comp loc: " + selectedComponent.getLocationOnScreen());
- //System.out.println("places[i] loc: " + places[i].getLocationOnScreen());
- //System.out.println("places[i] location: " + places[i].getLocationOnScreen().x + " " + places[i].getLocationOnScreen().getY());
- //selectedComponent.setBounds(places[i].getBounds() );
- //layer.add(selectedComponent);
- //repaint();
- moved = true;
- selectedComponent.setVisible(false);
- }
- //if(moved == true)
- //continue;
- if(moved == false)
- {
- if(selectedComponent.equals(card1))
- card1.setBounds(home1);
- else if(selectedComponent.equals(card2))
- card2.setBounds(home2);
- }
- moved = false;
- }
- }
- public void mouseDragged(MouseEvent e)
- {
- if(dragging)
- {
- Rectangle r = selectedComponent.getBounds();
- r.x += e.getX() - offset.x;
- r.y += e.getY() - offset.y;
- selectedComponent.setBounds(r);
- }
- }
- }//private inner class for moving
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement