我无法从嵌入在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中执行一个项目。
答案 0 :(得分:0)
关于在我可以获得用户输入的同时提供用户交互性的另一种方式 值,以便我可以使用它来进行一些计算和处理::
您可以使用MVC(模型,视图,控制器)方法来完成它。
此处视图是将使用表单获取用户数据的JSP页面 并将其发送给控制器。
servlet或控制器将在服务器中进行检索 它并将它发送到一个简单的模型或一个普通的旧Java类 可以进行计算。
然后servlet将从模型中检索计算出的数据 之后,servlet可以将视图调度到另一个JSP页面 向用户显示计算数据。
好处::
这样,您的演示文稿就会与执行计算的实际代码分开。因此,Web开发变得更容易。
网上有很多关于MVC的教程。如果要创建专业的Web应用程序,请尝试使用它们。