Я не могу получить пользовательские значения ввода из веб-запуска апплета или 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.
Спасибо за ответ. Но теперь у меня есть компоненты swing, где пользователю нужно будет использовать событие мыши, чтобы щелкнуть, чтобы выбрать свой выбор. Итак, теперь у меня есть JFrame. Я могу преобразовать его в апплет, но я не смогу получить выбор пользователя и рассчитать результаты в jsp. – gonggong
@gonggong Измените свой вопрос и добавьте комментарии, которые вы задали здесь. Это может помочь вам найти ответ и, я бы сказал, сохранить расчет из презентации или JSP. Выполните это вычисление в простом классе java и вызовите класс java из JSP, чтобы вычисленные данные отображались в представлении/JSP. И если это возможно, то и код. Спецификации Stackoverflow также требуют четкого понимания вашего вопроса. –
И еще одна информация. Теперь приложения Swing уже мертвы. Javafx - это приятная и простая структура для выполнения вашей задачи обработки событий. Вам не нужно правильно вводить коды для компонентов интерфейса, а код для GUI отделен от java в файле fxml. –