JSP中的用户交互

时间:2014-01-05 09:06:09

标签: jsp

我无法从嵌入在java服务器页面(jsp)中的applet或java web start获取用户输入值。

有没有其他方法可以提供用户交互性,同时我可以获取用户输入值,以便我可以用它来进行一些计算和处理?

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class GUI extends JFrame implements MouseListener{

//JFrame myFrame = new JFrame();
JLabel myPanels[];
int counter = 0;
int temp = 0;
int correctPair =0 ;
ArrayList<String> answers = new ArrayList<String>();
public GUI(){

    answers.add("2");
    answers.add("7");
    answers.add("9");
    answers.add("10");
    answers.add("11");
    answers.add("14");

  //  super("Grid");

    setLayout(new GridLayout(4,4));
    addMouseListener(this);

    myPanels = new JLabel[16];

    for (int x = 0;x<myPanels.length;x++){

        myPanels[x]=new JLabel("");
        myPanels[x].setOpaque(true);
        myPanels[x].setBackground(Color.white);
        myPanels[x].setBorder(BorderFactory.createLineBorder(Color.black));
        myPanels[x].addMouseListener(this); // <-- add same listener to each grid

    }
    myPanels[2].setText("A");
    myPanels[14].setText("B");

    for (int x = 0;x<myPanels.length;x++){

        myPanels[x].setName(x+"");

    }

    List<Integer> rolls = Arrays.asList(0,1,4,5,8,9,12,13);

    Collections.shuffle(rolls);
    myPanels[rolls.get(0)].setBackground(Color.green);
    myPanels[rolls.get(1)].setBackground(Color.green);



    List<Integer> rolls_left = Arrays.asList(2,3,6,7,10,11,14,15);

    Collections.shuffle(rolls);
    myPanels[rolls_left.get(0)].setBackground(Color.green);








 //Add all the squares (JLabels)
    for (int x = 0;x<myPanels.length;x++)
    add(myPanels[x]);
}


 public static void main(String arg[]) {
    GUI gui = new GUI();
    gui.setSize(200,200);
    gui.setResizable(false);
    gui.setVisible(true);




  }

public void paint(Graphics g) {
    super.paint(g);

    Graphics2D g2d = (Graphics2D) g;

    float[] dash1 = { 2f, 0f, 2f };

       BasicStroke bs1 = new BasicStroke(1, 
        BasicStroke.CAP_BUTT, 
        BasicStroke.JOIN_ROUND, 
        1.0f, 
        dash1,
        2f);
    g2d.setStroke(bs1);
    g2d.setColor(Color.red);
    g2d.drawLine(101, 0,101 , 200);

  }

@Override
public void mouseClicked(MouseEvent e) {
    JLabel clickedPanel = (JLabel) e.getSource();

    //Toggle colours    
    if (clickedPanel.getBackground()==Color.white)
    {
      counter++;
      clickedPanel.setBackground(Color.red);
      System.out.println("Box " + clickedPanel.getName() + " selected.");
      System.out.println("Counter:" + counter);
    }
    else if (clickedPanel.getBackground()==Color.green)
    {

    }
    else 
    {
        counter--;
        clickedPanel.setBackground(Color.white);
        System.out.println("Box " + clickedPanel.getName() + " unselected.");

        System.out.println("Counter:" + counter);

    }
    System.out.println(clickedPanel.getLocation());
    System.out.println(clickedPanel.getName());


    System.out.println(clickedPanel.getBackground());

    for (int x = 0;x<myPanels.length;x++){

        if(myPanels[x].getBackground().getBlue() == 0 &&        myPanels[x].getBackground().getGreen() == 0)
        {
        System.out.println("Box "+ myPanels[x].getName() + " selected for the answer.");
        }

        if(myPanels[x].getBackground().getBlue() == 0 && myPanels[x].getBackground().getGreen() == 255)
        {
        System.out.println("Box "+ myPanels[x].getName() + " is the initial question box coloured.");
        }

    }



    for(int i=0; i< answers.size(); i++)
    {           
        temp =i;

        if(answers.get(i).equals("0") && answers.get(temp+1).equals("3"))
        {
            correctPair++;

        }
        else if (answers.get(i).equals("1") && answers.get(temp+1).equals("2"))
        {
            correctPair++;

        }
        else if (answers.get(i).equals("4") && answers.get(temp+1).equals("7"))
        {
            correctPair++;

        }
        else if (answers.get(i).equals("5") && answers.get(temp+1).equals("6"))
        {
            correctPair++;

        }
        else if (answers.get(i).equals("8") && answers.get(temp+1).equals("11"))
        {
            correctPair++;

        }
        else if (answers.get(i).equals("9") && answers.get(temp+1).equals("10"))
        {
            correctPair++;

        }
        else if (answers.get(i).equals("12") && answers.get(temp+1).equals("15"))
        {
            correctPair++;

        }
        else if (answers.get(i).equals("13") && answers.get(temp+1).equals("14"))
        {
            correctPair++;

        }
        else
        {

        }

    }

  System.out.println("pairs: " + correctPair);        

}

@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

}



 }

上面是我的JFrame代码,我可以在他们点击的任何框中获得用户鼠标点击输入。

我想在jsp中嵌入这个,所以我发现可以使用Java Web Start或applet完成嵌入。但是我无法获得用户输入来进行一些逻辑处理。

还有其他方法可以嵌入并获取输入值,因为我目前正在JSP中执行一个项目。

1 个答案:

答案 0 :(得分:0)

  

关于在我可以获得用户输入的同时提供用户交互性的另一种方式   值,以便我可以使用它来进行一些计算和处理::

您可以使用MVC(模型,视图,控制器)方法来完成它。

  • 此处视图是将使用表单获取用户数据的JSP页面 并将其发送给控制器。

  • servlet或控制器将在服务器中进行检索 它并将它发送到一个简单的模型或一个普通的旧Java类 可以进行计算。

  • 然后servlet将从模型中检索计算出的数据 之后,servlet可以将视图调度到另一个JSP页面 向用户显示计算数据。

好处::

这样,您的演示文稿就会与执行计算的实际代码分开。因此,Web开发变得更容易。

网上有很多关于MVC的教程。如果要创建专业的Web应用程序,请尝试使用它们。