2014-01-05 48 views
0

我无法从Java服务器页面(jsp)中嵌入的applet或java web开始获取用户输入值。JSP中的用户交互

是否有任何其他方式提供用户交互性,而我可以获取用户输入值,以便我可以使用它来做一些计算和处理?

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中执行一个项目。

回答

0

关于其他方式提供用户交互性,而我可以获取用户输入 值,这样我可以用它做一些计算和处理::

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

  • 在这里,视图是JSP网页,将使用形式 取用户数据,并将其发送到控制器。

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

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

优势::

这样,你的演讲是从执行计算的实际代码分开。因此,Web开发变得更容易。

网上有很多关于MVC的教程。如果你想创建专业的网络应用程序,试试它们。

+0

感谢您的回复。但我现在拥有的是摆动组件,用户将需要使用鼠标事件点击来选择他们的选择。所以我现在有一个JFrame。我可以将它转换为小程序,但我无法获得用户选择并以jsp计算结果。 – gonggong

+0

@gonggong请编辑你的问题一下,并将你在这里提出的评论添加到问题中。这可以帮助你找到你的答案,并且仍然可以保持演示或JSP以外的计算。在普通的java类中执行该计算,并从JSP中调用Java类以使计算的数据显示在视图/ JSP中。如果可能的话,那么代码也是如此。 Stackoverflow规范也要求你清楚你的问题。 –

+0

和另一个信息。 Swing应用现在已经死了。 Javafx是一个更好,更简单的框架来完成事件处理的任务。你不需要在这里为你的UI组件编写正确的代码,并且GUI的代码在fxml文件中与java分离。 –