我無法從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中執行一個項目。
感謝您的回覆。但我現在擁有的是擺動組件,用戶將需要使用鼠標事件點擊來選擇他們的選擇。所以我現在有一個JFrame。我可以將它轉換爲小程序,但我無法獲得用戶選擇並以jsp計算結果。 – gonggong
@gonggong請編輯你的問題一下,並將你在這裏提出的評論添加到問題中。這可以幫助你找到你的答案,並且仍然可以保持演示或JSP以外的計算。在普通的java類中執行該計算,並從JSP中調用Java類以使計算的數據顯示在視圖/ JSP中。如果可能的話,那麼代碼也是如此。 Stackoverflow規範也要求你清楚你的問題。 –
和另一個信息。 Swing應用現在已經死了。 Javafx是一個更好,更簡單的框架來完成事件處理的任務。你不需要在這裏爲你的UI組件編寫正確的代碼,並且GUI的代碼在fxml文件中與java分離。 –