2014-01-05 49 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分離。 –