2014-01-05 3 views
0

Я не могу получить пользовательские значения ввода из веб-запуска апплета или java, встроенного в страницы java-сервера (jsp).Взаимодействие с пользователем в 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 или апплета. Но я не могу получить пользовательский ввод для выполнения некоторой логической обработки.

Итак, есть ли другой способ встраивания и получения входных значений, поскольку я в настоящее время выполняю проект в JSP.

ответ

0

О другом способе обеспечения взаимодействия с пользователем в то время как я могу получить пользовательский ввод значения, так что я могу использовать его, чтобы сделать некоторые расчеты и обработку ::

Вы можете использовать MVC (модель, вид , Controller) для его выполнения.

  • Здесь вид страница JSP, которая будет принимать пользовательские данные, используя форму и отправить его в контроллер.

  • сервлета или контроллер будет там на сервере, чтобы получить и отправить его в простую модель или простой старый класс Java, где вы можете сделать ваши расчеты.

  • Затем сервлет будет получать расчетные данные из модели и после этого сервлет может послать вид на другую страницу JSP для показывают расчетные данные для пользователя.

Преимущество ::

Таким образом, ваша презентация отделена от фактических кодов, которые выполняют расчеты. Следовательно, веб-разработка становится проще.

Существует множество обучающих онлайн-статей о MVC. Попробуйте их, если вы хотите создавать профессиональные веб-приложения.

+0

Спасибо за ответ. Но теперь у меня есть компоненты swing, где пользователю нужно будет использовать событие мыши, чтобы щелкнуть, чтобы выбрать свой выбор. Итак, теперь у меня есть JFrame. Я могу преобразовать его в апплет, но я не смогу получить выбор пользователя и рассчитать результаты в jsp. – gonggong

+0

@gonggong Измените свой вопрос и добавьте комментарии, которые вы задали здесь. Это может помочь вам найти ответ и, я бы сказал, сохранить расчет из презентации или JSP. Выполните это вычисление в простом классе java и вызовите класс java из JSP, чтобы вычисленные данные отображались в представлении/JSP. И если это возможно, то и код. Спецификации Stackoverflow также требуют четкого понимания вашего вопроса. –

+0

И еще одна информация. Теперь приложения Swing уже мертвы. Javafx - это приятная и простая структура для выполнения вашей задачи обработки событий. Вам не нужно правильно вводить коды для компонентов интерфейса, а код для GUI отделен от java в файле fxml. –

Смежные вопросы